2

我想从 xml 中获取模式元素列表。例如

<xs:schema id="SPPOnlineXML" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
 <xs:element name="SPPOnlineXML" msdata:IsDataSet="true" msdata:MainDataTable="lev_settings" msdata:UseCurrentLocale="true">
  <xs:complexType>
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element name="lev_settings">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="LEVID" type="xs:int" minOccurs="0" />
            <xs:element name="ATTHEADID" type="xs:int" minOccurs="0" />
            <xs:element name="MINDATETYPE" type="xs:unsignedByte" minOccurs="0" />
            <xs:element name="MINMONTH" type="xs:unsignedByte" minOccurs="0" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:choice>
  </xs:complexType>
 </xs:element>
</xs:schema> 

从上面的模式中,我想创建一个元素数组 "LEVID","ATTHEAD","MINDATETYPE","MINMONTH"

4

3 回答 3

2

xs:element name-attribute values要以数组的形式获取所有内容,我建议您选择 SimpleXML 并使用 xpath。一旦你在一个字符串(或一个文件)中获得了 XML,如果你知道 xpath 表达式,那真的很简单:

# Obtain all element names incl. complexTypes:

//xs:element/@name

# Obtain all element names excl. complexTypes and those
#  which contain anything incl. comments, text etc.:

//xs:element[not(node())]/@name

每个 PHP 代码示例如下所示:

$xml = simplexml_load_string($string);

echo "Obtain all element names incl. complexTypes:\n";

$elementNames = array_map('strval', $xml->xpath('//xs:element/@name'));
print_r($elementNames);

echo "\nObtain all element names excl. complexTypes and those
  which contain anything incl. comments, text etc.:\n";

$elementNames = array_map('strval', $xml->xpath('//xs:element[not(node())]/@name'));
print_r($elementNames);

请参阅在线演示。

于 2013-04-19T07:37:29.137 回答
0

代码:

$xml = new DOMDocument();

$xml->load('test.xml');
$xpath = new DOMXPath($xml);
$result = $xpath->query('//xs:sequence/xs:element');
$res_array = array();
foreach($result as $element_node) {
        $res_array[] = $element_node->getAttribute('name');
}
var_dump($res_array);

结果:

array(4) {
  [0]=>
  string(5) "LEVID"
  [1]=>
  string(9) "ATTHEADID"
  [2]=>
  string(11) "MINDATETYPE"
  [3]=>
  string(8) "MINMONTH"
}
于 2013-04-19T06:56:57.400 回答
0

我需要在 html 表上获取 XSD 文件的所有 xs:element,完整代码:

<table>
                <?php
                    // Load from xsd file
                    $url = "myFile.xsd";
                    $xml = file_get_contents($url, FILE_USE_INCLUDE_PATH);
                    $xml = simplexml_load_string($xml);


                    $elementNames = array_map('strval', $xml->xpath('//xs:element/@name'));
                    foreach ($elementNames as $value) {
                        echo "<tr><td>$value</td></tr>";
                    }

                    $elementNames = array_map('strval', $xml->xpath('//xs:element[not(node())]/@name'));
                    foreach ($elementNames as $value) {
                        echo "<tr><td>--->$value</td></tr>";
                    }
                ?>
</table>

如果您正在寻找 xs:attribute,您只需将整个代码中的“xs:element”替换为“xs:attribute”

于 2017-07-26T13:58:14.963 回答