我正在使用有关我需要解析的在线资源的元数据来提供XML文档。在不同的元数据项中有一组标记,这些标记以逗号分隔。这是一个例子:
<tags>Research skills, Searching, evaluating and referencing</tags>
问题在于其中一个&#34;标签&#34;包含一个逗号。标记中的逗号是编码的,但是用于分隔标记的逗号不是。我(目前)正在使用getText() method on org.dom4j.Node来读取<tags>
元素的文本内容,该元素返回一个字符串。
问题是我无法 - 据我所知 - 在我收到的字符串中区分编码的逗号(与未编码的逗号)。
如果没有编写我自己的XML解析器,是否有另一种方法可以在更多&#34; raw&#34;中访问该节点的文本内容。州? (即编码的逗号仍然编码的状态。)
答案 0 :(得分:1)
使用dom4j或DOM时,所有实体都已解析,因此您需要返回解析步骤来捕获字符引用。
SAX是一个更低级别的接口,并且通过其LexicalHandler接口支持在解析器遇到实体引用时得到通知,但它不报告字符引用。所以看起来你真的需要编写一个自己的解析器,或修补现有的解析器。
但最终,如果您可以更改文档的架构,那将是最好的:
<tags>
<tag>Research skills</tag>
<tag>Searching, evaluating and referencing</tag>
</tags>
在当前文档中,字符引用用作元数据。 XML元素是表达它的更好方式。
答案 1 :(得分:1)
使用http://andrewjwelch.com/lexev/中的LexEv
,在类路径上放置来自Apache Xerces的xercesImpl.jar
,我可以使用dom4j
编译并运行一些简短的示例:
LexEv lexEv = new LexEv();
SAXReader reader = new SAXReader(lexEv);
Document doc = reader.read("input1.xml");
System.out.println(doc.getRootElement().asXML());
如果input1.xml包含示例XML片段,则输出为
<tags xmlns:lexev="http://andrewjwelch.com/lexev">Research skills, Searching<lexev:char-ref name="#44">,</lexev:char-ref> evaluating and referencing</tags>
这样,您就可以获得输入的表示,其中可以区分纯字符和字符引用。
答案 2 :(得分:0)
据我所知,每个XML处理框架(vtd-xml除外)在解析过程中解析实体....
您只能使用VTDNav的toRawString()方法使用vtd-xml来区分字符与其实体编码的对应字符...