gpt4 book ai didi

java - XML 修复命名空间声明

转载 作者:太空宇宙 更新时间:2023-11-04 08:55:13 24 4
gpt4 key购买 nike

我正在尝试检测/解决 this RSS 元素中的错误。这意味着我必须找到错误的 namespace 声明并更改其值到正确的命名空间。例如:

xmlns:media="http://search.yahoo.com/mrss" 

必须是:

xmlns:media="http://search.yahoo.com/mrss/" 

如何在给定 org.w3c.Document 的情况下实现这一目标?

我的意思是找到了如何获取某个命名空间的所有元素:

        XPathFactory xpf = XPathFactory.newInstance();
XPath xpath = xpf.newXPath();
XPathExpression expr = xpath.compile("//*[namespace-uri()='http://search.yahoo.com/mrss']");


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);
this.log.warn("Found old mediaRSS namespace declaration: "+n.getTextContent());
}

}

所以现在我必须弄清楚如何通过 JAXP 更改节点的 namespace 。

最佳答案

您可能可以使用 XSLT 来实现,规则如下:

<xsl:template match="media:*">
<xsl:element name="local-name()" namespace="http://search.yahoo.com/mrss/">
<xsl:apply-templates match="node()|@*"/>
</xsl:element>
</xsl:template>

其中媒体绑定(bind)到“http://search.yahoo.com/mrss ”。

您可能需要稍微调整一下语法,因为我是在没有编译器帮助的情况下编写的。另外,您将得到的可能不是非常好的格式(许多元素上的命名空间声明),但它应该是本地正确的。

关于java - XML 修复命名空间声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2443925/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com