【问题标题】:XML - Replace xi:include with actual content from referenced filesXML - 将 xi:include 替换为引用文件中的实际内容
【发布时间】:2020-07-22 14:39:54
【问题描述】:

是否有任何软件可以将 XML 文件中的 <xi:include href="" /> 指令替换为引用文件中的实际内容?

或者有什么方法可以用一个简单的脚本来完成,也许是在 python 中?

编辑:感谢 E.Wiest。这解决了我的问题。 解决方案确实是使用XMLstarlet和XSLT对XML进行转换,将xi:include替换为引用文件的内容。

E.Wiest 提供的链接中的 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" />

<xsl:template match="/">
<xsl:apply-templates select="." mode="copy-no-namespaces"/>
</xsl:template>

<xsl:template match="*" mode="copy-no-namespaces">
    <xsl:element name="{local-name()}" namespace="{namespace-uri()}">
        <xsl:copy-of select="@*"/>
        <xsl:apply-templates select="node()" mode="copy-no-namespaces"/>
    </xsl:element>
</xsl:template>

<xsl:template match="comment()| processing-instruction()" mode="copy-no-namespaces">
    <xsl:copy/>
</xsl:template>

</xsl:stylesheet>

我对 XMLstarlet 的唯一问题是它将转换后的 XML 输出到 CMD 提示屏幕,我找不到任何选项来指定和输出文件。只有一个选项可以替换源 XML 文件。但我不想这样做。

作为一种变通解决方案,我编写了一个简短的 Python 脚本来检索输出并将其保存在不同的 XML 文件中。

【问题讨论】:

标签: xml xslt xpath xmlstarlet


【解决方案1】:

“我对 XMLstarlet 的唯一问题是它将转换后的 XML 输出到 CMD 提示屏幕,我找不到任何指定和输出文件的选项”

你可以像这样重定向输出

xmlstarlet sel -m ..... example.xml   > output.xml

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2011-10-31
    相关资源
    最近更新 更多