Gra*_*min 13 java xml dom xml-namespaces domdocument
我有以下代码
DocumentBuilderFactory dbFactory_ = DocumentBuilderFactory.newInstance();
Document doc_;
DocumentBuilder dBuilder = dbFactory_.newDocumentBuilder();
StringReader reader = new StringReader(s);
InputSource inputSource = new InputSource(reader);
doc_ = dBuilder.parse(inputSource);
doc_.getDocumentElement().normalize();
Run Code Online (Sandbox Code Playgroud)
然后我就能做到
doc_.getDocumentElement();
Run Code Online (Sandbox Code Playgroud)
得到我的第一个元素,但问题是而不是job元素是tns:job.
我知道并试图使用:
dbFactory_.setNamespaceAware(true);
Run Code Online (Sandbox Code Playgroud)
但这不是我正在寻找的东西,我需要一些东西来完全摆脱命名空间.
任何帮助将不胜感激,谢谢,
玩笑
小智 11
使用正则表达式功能.这将解决此问题:
public static String removeXmlStringNamespaceAndPreamble(String xmlString) {
return xmlString.replaceAll("(<\\?[^<]*\\?>)?", ""). /* remove preamble */
replaceAll("xmlns.*?(\"|\').*?(\"|\')", "") /* remove xmlns declaration */
.replaceAll("(<)(\\w+:)(.*?>)", "$1$3") /* remove opening tag prefix */
.replaceAll("(</)(\\w+:)(.*?>)", "$1$3"); /* remove closing tags prefix */
}
Run Code Online (Sandbox Code Playgroud)
如果绝对必须这样做,您可以预处理 XML 以删除所有名称空间。我建议不要这样做,因为从 XML 文档中删除命名空间本质上与从编程框架或库中删除命名空间相当 - 您可能会面临名称冲突的风险,并失去区分曾经不同的元素的能力。然而,这是你的葬礼。;-)
此 XSLT 转换会从任何 XML 文档中删除所有名称空间。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node()">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="node()|@*" />
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{local-name()}">
<xsl:apply-templates select="node()|@*" />
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
将其应用到您的 XML 文档。即使在这个网站上,执行此类操作的 Java 示例也应该很多。生成的文档将具有完全相同的结构和布局,只是没有名称空间。
对于元素和属性节点:
Node node = ...;
String name = node.getLocalName();
Run Code Online (Sandbox Code Playgroud)
将为您提供节点名称的本地部分。
| 归档时间: |
|
| 查看次数: |
51863 次 |
| 最近记录: |