java字符实体_在Java中解析XML时,请保留数字字符实体字符(例如``)

我正在解析包含数字字符实体字符的XML,例如(但不限于) <

>Java中的(换行符回车<>)。解析时,我将节点的文本内容附加到StringBuffer上,以便稍后将其写到文本文件中。

但是,当我将String写入文件或打印出文件时,这些unicode字符会被解析或转换为换行符/空格。

在Java中遍历XML文件的节点并将文本内容节点存储到String时,如何保留原始的数字字符实体字符符号?

演示xml文件的示例:

示例Java代码。它加载XML,遍历节点,并将每个节点的文本内容收集到StringBuffer。迭代结束后,它将StringBuffer写入控制台以及文件

符号(但不写入符号)。

将这些符号存储到字符串中时,如何保留这些符号?请你帮助我好吗?谢谢。

public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, TransformerException {

DocumentBuilderFactory documentFactory = DocumentBuilderFactory.newInstance();

Document document = null;

DocumentBuilder documentBuilder = documentFactory.newDocumentBuilder();

document = documentBuilder.parse(new File("path/to/demo.xml"));

StringBuilder sb = new StringBuilder();

NodeList nodeList = document.getElementsByTagName("*");

for (int i = 0; i < nodeList.getLength(); i++) {

Node node = nodeList.item(i);

if (node.getNodeType() == Node.ELEMENT_NODE) {

NamedNodeMap nnp = node.getAttributes();

for (int j = 0; j < nnp.getLength(); j++) {

sb.append(nnp.item(j).getTextContent());

}

}

}

System.out.println(sb.toString());

try (Writer writer = new BufferedWriter(new OutputStreamWriter(

new FileOutputStream("path/to/demo_output.xml"), "UTF-8"))) {

writer.write(sb.toString());

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 使用 SAX 解析 XML 文档,如果 XML 文档包含特殊字符,需要进行转义处理,否则会导致 SAX 解析错误。和 DOM 解析不同,SAX 解析器会在解析XML 文档的每个元素和属性,调用相应的回调方法,因此需要在处理回调方法进行转义处理。 以下是 Java 常见的 XML 特殊字符及其转义方式: - 小于符号 (<):使用 "<" 表示; - 大于符号 (>):使用 ">" 表示; - 双引号 ("):使用 """ 表示; - 单引号 ('):使用 "&apos;" 表示; - 和符号 (&):使用 "&" 表示。 以处理 XML 元素值为例,可以在 DefaultHandler 的 characters() 方法进行转义处理,示例如下: ```java import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class MyHandler extends DefaultHandler { private StringBuilder currentElementValue; @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // 初始化当前元素值 currentElementValue = new StringBuilder(); } @Override public void characters(char[] ch, int start, int length) throws SAXException { // 将当前元素值加入 StringBuilder currentElementValue.append(ch, start, length); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { // 处理当前元素值的特殊字符 String elementValue = currentElementValue.toString() .replaceAll("&", "&") .replaceAll("<", "<") .replaceAll(">", ">") .replaceAll("\"", """) .replaceAll("'", "&apos;"); // 处理完特殊字符后,进行后续处理 // ... } } ``` 在上述示例,使用 StringBuilder 来保存当前元素值,在 endElement() 方法,先使用 toString() 方法将 StringBuilder 转化为字符串,然后使用 replaceAll() 方法将特殊字符转义为对应的实体。处理完特殊字符后,可以在 endElement() 方法进行后续处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值