相关疑难解决方法(0)

Unmarshall期间无效的XML字符

我使用编码"UTF-8"将对象编组到XML文件.它成功生成文件.但是当我试图将其解组时,会出现错误:

在属性"{1}"的值中找到无效的XML字符(Unicode:0x {2}),元素为"0"

字符为0x1A或\ u001a,在UTF-8中有效,但在XML中是非法的.JAXB中的Marshaller允许将此字符写入XML文件,但Unmarshaller无法解析它.我试图使用另一种编码(UTF-16,ASCII等),但仍然是错误.

常见的解决方案是在XML解析之前删除/替换此无效字符.但是,如果我们需要这个角色,如何在解组之后获得原始角色?


在寻找此解决方案时,我想在解组之前用替换字符(例如dot =".")替换无效字符.

我创建了这个类:

public class InvalidXMLCharacterFilterReader extends FilterReader {

    public static final char substitute = '.'; 

    public InvalidXMLCharacterFilterReader(Reader in) {
        super(in);
    }

    @Override
    public int read(char[] cbuf, int off, int len) throws IOException {

        int read = super.read(cbuf, off, len);

        if (read == -1)
            return -1;

        for (int readPos = off; readPos < off + read; readPos++) {
            if(!isValid(cbuf[readPos])) {
                   cbuf[readPos] = substitute;
            }
        }

        return readPos - off + 1; 
    }

    public boolean …
Run Code Online (Sandbox Code Playgroud)

java jaxb xml-serialization unmarshalling

10
推荐指数
1
解决办法
2万
查看次数

使用JAXB Marshaller处理XML转义字符(例如引号)

我需要使用JAXB Marshaller(JAXB 2.2版)将XML java对象序列化为XML文件.现在在xml对象中,我有一个包含String值的标记,这样:

"<"tagA>
**"<"YYYYY>done"<"/YYYYY>**
"<"/tagA>
Run Code Online (Sandbox Code Playgroud)

现在您可以看到此字符串值再次包含标记.我希望在xml文件中以相同的方式编写它.

但是JAXB Marshaller会转换这些值,例如:

"&"lt;YYYYY"&"gt;"&"#xD;done ......等等

我无法使用JAXB 2.2单独处理这些转义字符.反正可能吗?

在这方面的任何帮助都会很棒..

在此先感谢Abhinav Mishra

java escaping character jaxb marshalling

8
推荐指数
2
解决办法
5万
查看次数

Python + Expat:错误&#0; 实体

我编写了一个小函数,它使用ElementTree和xpath来提取xml文件中某些元素的文本内容:

#!/usr/bin/env python2.5

import doctest
from xml.etree import ElementTree
from StringIO import StringIO

def parse_xml_etree(sin, xpath):
  """
Takes as input a stream containing XML and an XPath expression.
Applies the XPath expression to the XML and returns a generator
yielding the text contents of each element returned.

>>> parse_xml_etree(
...   StringIO('<test><elem1>one</elem1><elem2>two</elem2></test>'),
...   '//elem1').next()
'one'
>>> parse_xml_etree(
...   StringIO('<test><elem1>one</elem1><elem2>two</elem2></test>'),
...   '//elem2').next()
'two'
>>> parse_xml_etree(
...   StringIO('<test><null>&#0;</null><elem3>three</elem3></test>'),
...   '//elem2').next()
'three'
"""

  tree = ElementTree.parse(sin)
  for element in tree.findall(xpath):
    yield element.text  

if __name__ …
Run Code Online (Sandbox Code Playgroud)

python xml parsing elementtree expat-parser

5
推荐指数
1
解决办法
4059
查看次数