java-从XML删除空属性
作者:互联网
我有一个包含空属性的越野车xml,并且有一个解析器会咳嗽空属性.
我无法控制xml的生成,也无法控制在空attrs上咳嗽的解析器.因此,我要做的是一个预处理步骤,只需删除所有空属性即可.
我设法找到了空属性,但是现在我不知道如何删除它们:
XPathFactory xpf = XPathFactory.newInstance();
XPath xpath = xpf.newXPath();
XPathExpression expr = xpath.compile("//@*");
Object result = expr.evaluate(d, XPathConstants.NODESET);
if (result != null) {
NodeList nodes = (NodeList) result;
for(int node=0;node<nodes.getLength();node++)
{
Node n = nodes.item(node);
if(isEmpty(n.getTextContent()))
{
this.log.warn("Found empty attribute declaration "+n.toString());
NamedNodeMap parentAttrs = n.getParentNode().getAttributes();
parentAttrs.removeNamedItem(n.getNodeName());
}
}
}
当访问n.getParentNode().getAttributes()时,此代码为我提供了NPE.
但是,当我无法访问元素时,如何从元素中删除空属性呢?
解决方法:
以下样式表将复制源文档中的所有内容-除了仅包含空格的属性外.第一个模板只是复制所有内容-包括空属性.但是,由于使用了谓词,因此第二个模板的优先级高于第一个模板,这就是为什么当遇到空属性时,它会优先于更通用的第一个模板被选择:并且此第二个模板不会生成任何优先级输出.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*[normalize-space()='']"/>
</xsl:stylesheet>
标签:jaxp,xpath,xml,java 来源: https://codeday.me/bug/20191024/1918454.html