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 に答える