почему счетчик атрибутов равен 0 для этого тега XML - PullRequest
0 голосов
/ 15 ноября 2011

Я использую STAX Parser для анализа XML-документов. У меня есть этот тег ниже

<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

Ответы [ 2 ]

2 голосов
/ 15 ноября 2011

Элемент bustxml не имеет атрибутов, в противном случае он будет выглядеть следующим образом:

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

Если вы хотите прочитать содержимое элемента bustxml, вам следует использовать getElementTextвместо этого.

Обновление: Если вы говорите об элементе bustxml в кодированном фрагменте xml, содержащемся в разделе CDATA, то вам нужно извлечь текст этого фрагмента CDATA и затем проанализировать/ извлекать из него атрибуты.

0 голосов
/ 15 ноября 2011

Элемент bustxml вне CDATA не имеет атрибутов.

Bustxml внутри CDATA не является тегом. Вот что означает CDATA: «Это символьные данные. Не рассматривайте ничего, что вы найдете здесь, как разметку». Таким образом, содержание может выглядеть как тег, но это не тег из-за CDATA, и поэтому у него нет атрибутов.

К сожалению, люди часто берут XML и оборачиваются в CDATA. Они делают это, чтобы сделать вашу жизнь трудной. (Ну, я предполагаю, что это причина, я не могу думать ни о каком другом.) Когда это происходит, единственным выходом для вас является извлечение текста внутри CDATA и передача его в анализатор XML (или HTML), чтобы превратить его в дерево и тогда вы можете получить доступ к элементам и атрибутам обычным способом.

В вашем случае они сделали это вдвойне трудным, не только завернув его в CDATA, но и избежав его. Таким образом, они фактически избежали двойного выхода, так что вам придется дважды проходить через синтаксический анализатор (в дополнение к оригинальному синтаксическому анализу), чтобы разобраться в этом.

Я бы очень громко жаловался людям, приславшим вам этот мусор.

...