如何在从 XML 文件读取内容时保留 "Character Reference Codes"(<)

How to preserve "Character Reference Codes"(&lt;) while reading content from XML file

我使用下面的代码从 xml 文件中读取内容

public static void toXSD() {
    SAXBuilder saxBuilder = new SAXBuilder();
    Document document;
        try {
            document = saxBuilder.build(new File("D:\Users\schintha\Desktop\Work\\test_files\SUMMARY_11.xml"));
            for (Element element : document.getRootElement().getChildren()) {
                System.out.println("Name = " + element.getName());
                System.out.println("Value = " + element.getValue());
                System.out.println("Text = " + element.getText());                  
            }        
        } catch (JDOMException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();}}

我的输入文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<temp>
   <position>&lt;</position>   
</temp>

输出为

Name = position
Value = <
Text = <

在这方面,我要求让我知道如何按原样检索 &lt;,而不是“<”。因为它不是标签的开头,而是标签 "position"

你不能。解析器的工作是解码这些东西并为您提供底层数据,而不管它是如何表示的。 &lt; 代表字符 < 所以这就是解析器给你的。

使用 text-commons org.apache.commons.text.StringEscapeUtils class escapeXml10 方法,我们可以转义 xml 标签中的字符引用代码 - StringEscapeUtils.escapeXml10(element.getValue())

完整示例如下所示

public static void toXSD() {
    SAXBuilder saxBuilder = new SAXBuilder();
    Document document;
        try {
            document = saxBuilder.build(new File("D:\Users\schintha\Desktop\Work\\test_files\SUMMARY_11.xml"));
            for (Element element : document.getRootElement().getChildren()) {
                System.out.println("Name = " + element.getName());
                System.out.println("Value = " + StringEscapeUtils.escapeXml10(element.getValue()));                                  
            }        
        } catch (JDOMException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();}}

问题中使用了相同的输入文件:

<?xml version="1.0" encoding="UTF-8"?>
<temp>
   <position>&lt;</position>   
</temp>

得到预期的输出是(没有解析的位置标签的值)

Name = position
Value = &lt;