XSLT,向生成的 xml 文件的根节点添加属性

发布于 2024-11-10 11:23:33 字数 1431 浏览 0 评论 0 原文

我使用 xslt 将两个 xml 文件添加在一起,然后生成的 xml 文件应符合架构。我可以将两个 xml 文件添加在一起,但结果应该在根元素中具有 noNamespaceSchemaLocation="file:///osba.xsd" ass 属性。

这是我的 .xsl 文件:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="ISO-8859-1" indent="yes" />
<xsl:variable name="with" select="'reception.xml'" />

<xsl:template match="@*|node()" >
  <xsl:copy>
    <xsl:apply-templates select="@*|node()" />
  </xsl:copy>
</xsl:template>

<xsl:template match="bd">
 <xsl:copy>
  <xsl:apply-templates select="@*|node()" />
  <xsl:variable name="info" select="document($with)/reception/bd[title=current()/title]/." />
  <xsl:for-each select="$info/*">
    <xsl:if test="name()!='title'">
      <xsl:copy-of select="." />
    </xsl:if>
  </xsl:for-each>
 </xsl:copy>
</xsl:template>
</xsl:transform>

我想添加如下内容:

<xsl:template match="/*" >
  <xsl:attribute name="noNamespaceSchemaLocation"><![CDATA[file:///I:/IMY%20Project/XML%20Files/osba.xsd]]></xsl:attribute>
<xsl:apply-templates/>                          

我还没有找到任何方法来匹配当前元素是否为根,我还在考虑是否可以在第一个 xsl:template 中放置 xsl:if test="root" 类型的处理。

感谢您的帮助

I am adding two xml files together using xslt, and then this resultant xml file should comply with a schema. I am able to add the two xml files together but then the result should have noNamespaceSchemaLocation="file:///osba.xsd" ass an attribute in the root element.

Here is my .xsl file:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="ISO-8859-1" indent="yes" />
<xsl:variable name="with" select="'reception.xml'" />

<xsl:template match="@*|node()" >
  <xsl:copy>
    <xsl:apply-templates select="@*|node()" />
  </xsl:copy>
</xsl:template>

<xsl:template match="bd">
 <xsl:copy>
  <xsl:apply-templates select="@*|node()" />
  <xsl:variable name="info" select="document($with)/reception/bd[title=current()/title]/." />
  <xsl:for-each select="$info/*">
    <xsl:if test="name()!='title'">
      <xsl:copy-of select="." />
    </xsl:if>
  </xsl:for-each>
 </xsl:copy>
</xsl:template>
</xsl:transform>

I want to add something like:

<xsl:template match="/*" >
  <xsl:attribute name="noNamespaceSchemaLocation"><![CDATA[file:///I:/IMY%20Project/XML%20Files/osba.xsd]]></xsl:attribute>
<xsl:apply-templates/>                          

I have not found any way to match if the current element is root, I was also thinking of maybe putting an xsl:if test="root" type of deal in the first xsl:template.

Thanks for any help

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

请你别敷衍 2024-11-17 11:23:33

像这样的东西:

    <xsl:template match="/*">
        <xsl:element name="{local-name(.)}" namespace="{namespace-uri(.)}">
            <xsl:copy-of select="@*"/>
            <xsl:attribute name="noNamespaceSchemaLocation"
                namespace="http://www.w3.org/2001/XMLSchema-instance">your-value</xsl:attribute>
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>

Something like this:

    <xsl:template match="/*">
        <xsl:element name="{local-name(.)}" namespace="{namespace-uri(.)}">
            <xsl:copy-of select="@*"/>
            <xsl:attribute name="noNamespaceSchemaLocation"
                namespace="http://www.w3.org/2001/XMLSchema-instance">your-value</xsl:attribute>
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文