【问题标题】:Creating XMLStreamReader for a string with "&" character为带有“&”字符的字符串创建 XMLStreamReader
【发布时间】:2022-01-12 13:33:52
【问题描述】:

我想解组一个包含 '&' 字符的 xmlString。

    XMLInputFactory xif = XmlUtils.newXMLInputFactory();
    String test = "<Res>Abc & Def</Res>";
    StringReader sr = new StringReader(test);
    try {
      XMLStreamReader reader = xif.createXMLStreamReader(sr);
      JAXBContext jaxbContext = JAXBContext.newInstance(BluelineReprintInvoiceResponseData.class);
      Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
      Object o = unmarshaller.unmarshal(reader);
    } catch(Exception ex) {
      ex.printStackTrace();
    }

有什么方法可以在不使用 replace/replaceAll 替换字符串中的 '&' 字符的情况下解组字符串?

【问题讨论】:

    标签: java xml-parsing unmarshalling xmlstreamreader


    【解决方案1】:

    有什么方法可以在不使用replace / replaceAll 替换字符串中的&amp; 字符的情况下解组字符串?

    基本上没有,因为那是无效 XML。在这种情况下,不允许使用裸 & 符号。任何符合标准的 XML 解析器在遇到 &amp; 并且找不到对应的 ; 时都会给您一个解析错误

    在其来源修复(所谓的)XML 的正确解决方案。曾经以 XML 格式生成该字符串是错误的。如果它是由人输入的,则应在输入时验证 XML。

    请注意,如果您尝试使用字符串替换来自动“纠正”损坏的 XML 中的裸 & 符号,则可能会造成其他损害;即

    • 破坏字符和实体引用,或
    • 弄乱了 CDATA 部分的内容。

    自动更正代码需要了解与符号出现的上下文。使用正则表达式会很困难。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-29
      • 1970-01-01
      • 2021-08-15
      • 2017-05-03
      • 1970-01-01
      • 2021-09-25
      • 2023-03-20
      • 1970-01-01
      相关资源
      最近更新 更多