Чтение XML с помощью SAX, пропуск узлов, которые передают org.xml.sax.SAXParseException - PullRequest
0 голосов
/ 22 ноября 2011

Я читаю XML, используя SAX (javax.xml.parsers.SAXParser;). В этом XML есть некоторые специальные символы, такие как (&, <,>, ", '), доступные среди значений дочерних узлов. Таким образом, до этого момента SAX успешно читал XML, но в этот момент он выдает org.xml.sax.SAXParseException.

Например, в приведенном ниже примере XML SAX считывает значение узла успешно. Но он выбрасывает org.xml.sax.SAXParseException в значение, поскольку значение аргумента Name содержит <</em>.

<Parent>
   <child1>
      LS-23541723
   </child1>
   <child2 id="2" Name="T-Shirt And Denim - T<D" Rate="500.00">
   </child2>
   <child3>
      <![CDATA[This is the child 2]]>
   </child3>
   <child4>
      <![CDATA[This is the child 4]]>
   </child4>
</Parent>

Я не могу определить узлы, которые содержат эти специальные символы, до того, как они поступят. (Это dyanamic.) Итак, я хочу прочитать XML с SAX, игнорируя узлы, которые содержат эти специальные символы ... Я думаю, что могу сделать это, если возможно прочитать XML с помощью SAX, пропуская узлы, которые передают исключение org.xml.sax.SAXParseException.

Возможно ли это, и если да, то как?

Примечание: я не могу просто заменить их ссылками сущностей, такими как &amp;, поскольку иногда XML-узлы также соединяются с &lt;, &gt; (как &lt;child1&gt;). Поэтому, прежде чем начать читать его с помощью SAX, я заменяю все ссылки на сущности ссылками на символы. (replaceAll("&gt;",">") и т. Д.)

1 Ответ

0 голосов
/ 08 декабря 2011

Я не думаю, что SAX справится с этим. XML должен быть правильно сформирован. Таким образом, вы должны сделать кучу замен, прежде чем текст будет отправлен в SAX. Ищите любые ', " или <, которые находятся не в нужных местах. " между ", ' между ' и <, которые не являются частью начального или конечного тега. Это должно быть осуществимо. Это второй проход после вашего первого прохода, который заменяет &lt; и &gt; их эквивалентами. В идеале вы также должны следить за комментариями, разделом CDATA и т. Д., Чтобы убедиться, что они правильно сформированы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...