java - 使用 xslt 删除自定义 xml 命名空间
问题描述
我正在尝试删除 xml 文档中的命名空间并收到以下错误:
错误:'元素“car:name”的前缀“car”未绑定。' 错误:'com.sun.org.apache.xml.internal.utils.WrappedRuntimeException:元素“car:name”的前缀“car”未绑定。'
这是我的xml文件:
<car:name>Toyota Corolla</car:name>
<car:year>2000</car:year>
这是我的 removeNs.xslt
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:variable name="vLowercase" select="'abcdefghijklmnopqrstuvwxyz'" />
<xsl:variable name="vUppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
<xsl:template match="*">
<xsl:element
name="{concat(translate(substring(local-name(), 1, 1),
$vUppercase, $vLowercase),
substring(local-name(), 2))}">
<xsl:apply-templates />
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{local-name(.)}">
<xsl:value-of select="." />
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
和我的java方法:
private static String stripNameSpaces(String inXml) {
String outputXml = "";
try {
StringWriter writer = new StringWriter();
TransformerFactory factory = TransformerFactory.newInstance();
Source xslt = new StreamSource(new File("./src/main/resources/removeNs.xslt"));
Transformer transformer = factory.newTransformer(xslt);
Source text = new StreamSource(new StringReader(inXml));
transformer.transform(text, new StreamResult(writer));
outputXml = writer.toString();
} catch (TransformerConfigurationException tcEx) {
tcEx.printStackTrace();
return tcEx.getMessage();
} catch (TransformerException tEx) {
tEx.printStackTrace();
return tEx.getMessage();
}
return outputXml;
}
我的猜测是我必须向 removeNs.xslt 添加一些内容,但无法弄清楚是什么。如果有人可以帮助我,我将不胜感激
解决方案
推荐阅读
- python - matplotlib 在主图中缩放绘图窗口?
- python - Plotly:使用 plotly express 行时如何在 hoverinfo 中格式化日期?
- php - 有时用户如何能够上传 png 格式?
- windows - Windows 2000 cdplayer.exe 对光盘元数据的响应格式是什么?
- swift - AudioKit Playground 构建失败
- flutter - Flutter 中适合游戏的 Widget 和/或布局
- haskell - Haskell 替换现有列表中的项目
- python - python numpy:以不同的值滚动列
- sql - 基于数量值的重复行
- haskell - GADTs 但不是存在量化