我使用编码"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) 我需要使用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
我编写了一个小函数,它使用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>�</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) java ×2
jaxb ×2
character ×1
elementtree ×1
escaping ×1
expat-parser ×1
marshalling ×1
parsing ×1
python ×1
xml ×1