0

私はこのXMLを持っています:

<?xml version="1.0" encoding="UTF-8"?>
<XML xmlns:r="#SchemaA2A">
  <Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes" name="SchemaA2A">
    <ElementType name="ROOT" content="eltOnly" model="closed" order="many">
      <AttributeType name="Response" dt:type="i4"/>
      <AttributeType name="ErrorNumber" dt:type="i4"/>
      <AttributeType name="ErrorDescription" dt:type="string"/>
      <AttributeType name="ErrorDisplay" dt:type="boolean"/>
      <attribute type="Response"/>
      <attribute type="ErrorNumber"/>
      <attribute type="ErrorDescription"/>
      <attribute type="ErrorDisplay"/>
    </ElementType>
    <ElementType name="ROW" content="empty" model="closed">
      <AttributeType name="Personid" dt:type="string"/>
      <attribute type="Personid"/>
    </ElementType>
  </Schema>
  <r:ROOT Response="1" ErrorNumber="0" ErrorDescription="" ErrorDisplay="1">
    <r:ROW Personid="1077231296"/>
  </r:ROOT>
</XML>

そして、これらは両方とも空の値を返します。

var person_id = (xmlObject \ "XML" \ "ROOT" \ "ROW" \ "@Personid").text

var person_id = (xmlObject \ "ROOT" \ "ROW" \ "@Personid").text

私が間違っていることは何ですか?

4

2 に答える 2

2

試す:

var person_id = (xmlObject \\ "XML" \ "ROOT" \ "ROW" \ "@Personid").text

また

var person_id = (xmlObject \\ "ROOT" \ "ROW" \ "@Personid").text
于 2012-08-24T16:32:50.383 に答える
0

質問に直接答えることはありませんが、ここには多くの心配事があり、これがそれらを強調するのに役立つことを願っています。

「xmlは予約されています」という警告/エラーは正しいです-xml仕様は次のように説明しています。

文字列"xml"で始まる名前、または(('X' |'x')('M' |'m')('L' |'l'))に一致する任意の文字列は、標準化のために予約されていますこの仕様のこのバージョンまたは将来のバージョン

ただし、ここでw3cバリデーターもテストすると、そのエラーについてはまったく何もわかりません。他のパーサーは仕様に正しく従います。そのドキュメントを送信するWebサービスは、代わりに有効なxmlを送信する必要がありますが、常にこれを選択できるとは限りません。

ただし、本当にXMLDeclヘッダー(?xmlビット)が必要です。特にエンコーディングにより、パーサーはストリームを解析して他の文字セットを処理する方法を知ることができます。持っているのはとても良いことです。

また、使用されている「XPath」に関しては、その属性は異なりますが、ROOT要素とROW要素は#SchemaA2A名前空間にあります\ * ROWの検索は、空の名前空間""とのみ一致する必要があります。 Xml XPath(DSLおよび文字列ベース)をスケーリングすると、他の多くのXPathライブラリと同様にこの区別が強制されます。Scala Xmlsアプローチは機能しますが、誰かがあなたの仮定を破る文書をあなたに送るまでだけです。

于 2012-08-25T18:59:08.393 に答える