我正在尝试使用DOM或SAX解析java中的xml文件。问题是在解析时,如果我的xml包含了作为特殊字符的<< > “然后解析器抛出ParserException。
例如xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<abc>
<check name="bike" value="apache <nice model"/>
<check name="car" value="tata sumo "style" />
</abc>
在此示例中,xml元素检查具有属性值,并且它包含&lt;或者“。解析器将其视为无效并抛出解析器异常。
现在我的问题是,在将xml文件解析为解析器之前,检测xml文件属性值中的特殊字符(&lt;或&gt;或“),并且必须用空格替换该符号(&lt;&gt;”)。 / p>
例如:如果xml包含&lt;
<check name="bike" value="apache <nice model"/>
替换为空格
<check name="bike" value="apache nice model"/>
。请给我一些建议。它可以用什么方法完成......我们可以用XSD做吗...
提前感谢。
答案 0 :(得分:0)
如何用实体替换这些符号?
' is an apostrophe: '
& is an ampersand: &
" is a quotation mark: "
< is a less-than symbol: <
> is a greater-than symbol: >
答案 1 :(得分:0)
有人可能会说它是不是真的是xml。一条规则是xml必须格式正确。这意味着标签必须具有打开和关闭,在所有地方都不允许某些字符(特别是属性中的&lt;&gt;)。
如果你无法从源头纠正这个问题,也就是说,生成格式良好的xml,那么我猜你需要首先进行简单搜索并替换为@Visher建议,然后将其视为xml或者提出你的想法自己的解析器
答案 2 :(得分:0)
此代码运行良好(用引号替换'&lt;'和'&gt;'):
public static void main(String[] args)
{
char[] characters = new char[]{'<', '>'};
String[] entities = new String[]{"<", ">"};
String text = "<check name=\"bike\" value=\"apache <nice model\"/> ";
StringBuilder sb = new StringBuilder();
boolean insideQuotation = false;
for (int i = 0; i < text.length(); i++)
{
char character = text.charAt(i);
if (insideQuotation)
{
int index = -1;
for (int x = 0; x < characters.length; x++)
{
if (characters[x] == character)
{
index = x;
break;
}
}
if (index != -1)
sb.append(entities[index]);
else
sb.append(character);
if (character == '"')
insideQuotation = false;
}
else
{
if (character == '"')
insideQuotation = true;
sb.append(character);
}
}
System.out.println(sb.toString());
}
如果您在引号内添加其他引号,则会出现问题。