从XML文件读取内容时如何保留“字符参考代码”(<)

时间:2018-07-06 14:01:15

标签: java xml jaxb saxparser

我已使用以下代码从xml文件读取内容

(?DS[ \t]*)([+\-][ \t]*\d{1,2}\.\d{2})

我的输入文件如下所示:

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 = < 而不是“ <”。因为它不是标记的开始,而是标记“ position”的值

2 个答案:

答案 0 :(得分:1)

不能。解析器的工作是解码这些东西并为您提供基础数据,而不管其表示方式如何。 &lt;代表字符<,这就是解析器为您提供的内容。

答案 1 :(得分:0)

使用文本公用org.apache.commons.text.StringEscapeUtilsescapeXml10方法,我们可以在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;