2011-11-15 73 views
0

我正在使用STAX Parser解析XML文檔。 我有這個標籤之下爲什麼此XML標記的屬性計數爲0

<bustxml><![CDATA[&lt;bustxml xmlns=\"http://www.bustprotocol.org/bustxml-5-0-SP2\"&gt;&lt;NewOrdMBag TmInForce=\"0\" OrdTyp=\"1\" Acct=\"1234\"&gt;&lt;Ord OrdQty=\"1\" </bustxml> 

我需要閱讀上述標籤的屬性,所以我用

case XMLStreamConstants.START_ELEMENT: 
       for(int i = 0, n = reader.getAttributeCount(); i < n; ++i) 
        System.out.println("Attribute: " + reader.getAttributeName(i) 
          + "" + reader.getAttributeValue(i)); 

但不幸的是我得到,Attrbute計數爲0。 請告訴我如何可以讀取所有bustxml標籤

+0

在您的示例FYI中,您打開一個CDATA節而不關閉它 – Justin

+0

嗨賈斯汀,爲安全性我沒有發佈整個XML。所以我想這不是一個問題。 – Pawan

回答

0

CDATA外部的bustxml元素沒有屬性。

CDATA中的bustxml不是標籤。這就是CDATA的含義:「這是字符數據,不要把你在這裏找到的任何東西當作標記。」所以內容可能看起來像一個標籤,但它不是標籤,因爲CDATA,因此它沒有屬性。

不幸的是,人們很常見採用XML並將其包裝在CDATA中。他們這樣做會讓你的生活變得困難。 (嗯,我認爲這是原因,我想不出任何其他)。當發生這種情況時,唯一的補救辦法是提取CDATA中的文本並將其提交給XML(或HTML)解析器以將其轉換爲樹,然後您可以以正常方式訪問元素和屬性。

在你的情況下,他們不僅將它包裝在CDATA中,而且還將其轉義出來,從而使它倍加困難。所以他們已經有效地雙重轉義了它,所以你必須通過解析器兩次(除了原始解析)來理解它。

我會非常大聲抱怨發送給你垃圾的人。

2

bustxml元素沒有屬性裏面的內容,如果沒有它應該是這樣的:

<bustxml MyAttribute="MyValue"> 
<!-- Content --> 
</bustxml> 

如果你想閱讀的內容bustxml元素,那麼你應該使用getElementText來代替。

更新:如果你在談論中所含CDATA部分編碼的XML片段bustxml元素,那麼你需要提取此CDATA片段的文本,然後解析/提取物從它的屬性來代替。

+0

謝謝,我應該在哪裏使用getElementText或getText?因爲reader.getAttributeCount();現在是0,(根據屬性計數) – Pawan

+0

@ yyyi777我相信你應該使用'getElementText',但我不是100%確定(我通常是一個C#開發人員) – Justin

+0

我試圖提取使用CData的內容,bustxml = reader.getName()。toString();但我們仍然可以如何從這個獲得屬性計數? – Pawan

相關問題