2010-04-12 3 views
3

Я использую DocumentBuilder для анализа XML-файлов. Однако для спецификации проекта требуется, чтобы в текстовых узлах строки, такие как &quot; и &lt;, были возвращены буквально, а не декодирован как символы (и <).Java: Игнорирование экранов при разборе XML

Предыдущий аналогичный вопрос, Read escaped quote as escaped quote from xml, получил один ответ, который, как представляется, специфичен для Apache, а другой, который, похоже, просто не делает того, что он говорит. Я хотел бы быть опровергнуто на любой счет, однако :)

Для справки, вот некоторый код:

file = new File(fileName); 
    DocBderFac = DocumentBuilderFactory.newInstance(); 
    DocBder = DocBderFac.newDocumentBuilder(); 
    doc = DocBder.parse(file); 

    NodeList textElmntLst = doc.getElementsByTagName(text); 
    Element textElmnt = (Element) textElmntLst.item(0); 

    NodeList txts = textElmnt.getChildNodes(); 
    String txt = ((Node) txts.item(0)).getNodeValue(); 
    System.out.println(txt); 

Я хотел бы, что Println(), чтобы производить такие вещи, как

&quot;3&gt;2&quot; 

вместо

"3>2" 

что и в настоящее время происходит. Спасибо!

+0

Можете ли вы пояснить, что вы хотите здесь, вы хотите распечатать экранированную версию или хотите, чтобы она зависела от того, как она представлена ​​в XML? – Yishai

+0

Yishai: Либо было бы полезно, поскольку я думаю, что может быть так, что в файле никогда нет буквенных котировок,> s и т. Д. Однако я не могу быть уверен, и если бы я был, я бы хотел их сохранить. – Personman

+0

Не являются некотируемыми символами, например> незаконными в XML? Никогда не будет буквального>. – DJClayworth

ответ

-3

Оба хорошие ответы, но и немного слишком тяжелый вес для этого очень малого применения , Я закончил с общим взломом, просто удалив все & s (я делаю это до & s, которые в любом случае не являются частью экранов). Это уродливо, но оно работает.

Редактировать: Я понимаю, что в этом есть что-то не так, и это требование глупо. Это для школьного проекта, все, что имеет значение, это то, что он работает в одном случае, и это требование не является моей ошибкой :)

+1

Он перестанет работать в какой-то момент, и вы будете задаваться вопросом, откуда оно взялось;) – Bozho

1

Один из подходов может заключаться в том, чтобы попробовать dom4j, а также использовать метод Node.asXML(). Он может вернуть глубокую структуру, поэтому может потребоваться клонирование, чтобы получить только нужный узел или текст без каких-либо его дочерних элементов.

2

Вы можете превратить их обратно в XML-закодированные форме

StringEscapeUtils.escapeXml(str); 

(javadoc, commons-lang)

2

Я использую DocumentBuilder для анализа XML-файлов. Однако спецификация для проекта требует, чтобы в текстовых узлах, строки, как &quot; и &lt; быть возвращена в буквальном смысле, а не декодируются как символы (»и <).

Bad требование. Не делайте этого.

или, по крайней мере, внимательно рассмотреть, почему вы думаете, что вы хотите или нужно.

секции CDATA и побеги являются тактика для позволяя вам передавать текст, как кавычки и «<» символы через XML и не XML путать их с разметкой Они не имеют никакого значения сами по себе и когда вы тянете их из XML вы должны принять их как цитаты и символы «<», которые они должны были представлять.

Смежные вопросы