Получить данные из XML .NET DataSet в PHP - PullRequest
2 голосов
/ 22 июля 2009

У меня есть следующий XML из веб-службы .NET:

<?xml version="1.0" encoding="utf-8"?>
<DataSet>
  <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xs:element name="NewDataSet" msdata:IsDataSet="true">
      <xs:complexType>
        <xs:choice maxOccurs="unbounded">
          <xs:element name="Table1">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="GROUP_ID" type="xs:int" minOccurs="0" />
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:choice>
      </xs:complexType>
    </xs:element>
  </xs:schema>
  <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
    <NewDataSet xmlns="">
      <Table1 diffgr:id="Table11" msdata:rowOrder="0" diffgr:hasChanges="inserted">
        <GROUP_ID>NUM</GROUP_ID>
      </Table1>
    </NewDataSet>
  </diffgr:diffgram>
</DataSet>

Мне нужно получить доступ только к значению узла GROUP_ID, но я хочу знать самый простой способ сделать это. До сих пор я использовал DomDocument и DomXPath для запроса этого узла, но я надеюсь, что есть лучший способ, который я пропускаю:

$xml = new DomDocument();
$xml->load('file.xml');
$xp = new DomXPath($xml);
$result = $xp->query('//GROUP_ID');
$id = null;
foreach($result as $node){
  $id = $node->nodeValue;
  break;
}

Спасибо!

1 Ответ

2 голосов
/ 22 июля 2009

К сожалению, необходимость зацикливания необходима. Если бы вы использовали simplexml, вы могли бы написать свой код так же просто, как:

$xml = simplexml_load_file('file.xml');
$result = $xml->xpath('//GROUP_ID');
while(list(,$node) = each($result)) {
    $id = (string) $node;
    break; // optional
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...