xmlns不允许xslt更新值

xmlns不允许xslt更新值,xml,xslt,Xml,Xslt,因此,我们的数据在子/父级中有xmlns=,它阻止子级的值被XSLT更新 示例数据请注意,我故意删除了xmlns=http://example.com/abc-artifact 从第二条记录中,在之后,我了解到您面临的问题是由于名称空间引起的 您可以添加在xml中删除的命名空间 这是为了满足您的需求而修改的xslt 纽多布 您将看到下面的输出xml 杰克 纽多布 托尼亚 纽多布 希望是您试图解决的问题,现在看到了预期的输出 编辑:您可以在第二个模板中看到有关名称空间的更改我知道您面临的问题是由于

因此,我们的数据在子/父级中有xmlns=,它阻止子级的值被XSLT更新


示例数据请注意,我故意删除了xmlns=http://example.com/abc-artifact 从第二条记录中,在之后,我了解到您面临的问题是由于名称空间引起的

您可以添加在xml中删除的命名空间

这是为了满足您的需求而修改的xslt

纽多布 您将看到下面的输出xml

杰克 纽多布 托尼亚 纽多布 希望是您试图解决的问题,现在看到了预期的输出


编辑:您可以在第二个模板中看到有关名称空间的更改

我知道您面临的问题是由于名称空间引起的

您可以添加在xml中删除的命名空间

这是为了满足您的需求而修改的xslt

纽多布 您将看到下面的输出xml

杰克 纽多布 托尼亚 纽多布 希望是您试图解决的问题,现在看到了预期的输出

编辑:您可以在第二个模板中看到更改,该模板涉及命名空间

您的模板:

<xsl:template match="DateOfBirth">
您的模板:

<xsl:template match="DateOfBirth">

当您的输入中有这样一个默认名称空间时,您可以将该名称空间uri绑定到XSLT中的前缀,以便它能够正确匹配

另外,xsl:copy将为您处理名称空间

例如

XML输入将名称空间添加回第二个字母

XSLT1.0

XML输出

此外,如果您只是更改文本,您可以专门匹配它,并让标识转换处理元素/属性

<xsl:template match="abc:DateOfBirth/text()">
    <xsl:text>NewDOB</xsl:text>>
</xsl:template>

当您的输入中有这样一个默认名称空间时,您可以将该名称空间uri绑定到XSLT中的前缀,以便它能够正确匹配

另外,xsl:copy将为您处理名称空间

例如

XML输入将名称空间添加回第二个字母

XSLT1.0

XML输出

此外,如果您只是更改文本,您可以专门匹配它,并让标识转换处理元素/属性

<xsl:template match="abc:DateOfBirth/text()">
    <xsl:text>NewDOB</xsl:text>>
</xsl:template>

名称空间被假定存在是有原因的。仅使用本地名称忽略名称空间不是一个好做法。@michael.hor257k,同意第一部分。它在请求用户时使用元素DateOfBirth的默认名称空间。你是说同样的吗?我是说这部分。另一部分,可以简单地由处理。名称空间被假定存在是有原因的。仅使用本地名称忽略名称空间不是一个好做法。@michael.hor257k,同意第一部分。它在请求用户时使用元素DateOfBirth的默认名称空间。你是说同样的吗?我是说这部分。另一部分,可以简单地处理。它正在丢失字母元素的属性。对,我的意思是说schemalocation和type。@Rao如果OP需要它们,他可以复制它们。不过,看起来他并不想要这些东西。@Rao这真是太棒了,Michael!谢谢我不确定我是否理解你的评论Rao。我运行了XSLT,并在XMLSpy中运行了一个比较,预期只会出现更改的项。如果有什么我应该担心的,请告诉我。谢谢这工作做得很好,迈克尔。你以前帮过我好几次。谢谢它正在丢失字母元素的属性。对,我的意思是说schemalocation和type。@Rao如果OP需要它们,他可以复制它们。不过,看起来他并不想要这些东西。@Rao这真是太棒了,Michael!谢谢我不确定我是否理解你的评论Rao。我运行了XSLT,并在XMLSpy中运行了一个比较,预期只会出现更改的项。如果有什么我应该担心的,请告诉我。谢谢这工作做得很好,迈克尔。你以前帮过我好几次。谢谢
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:abc="http://example.com/abc-artifact" >
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

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

<xsl:template match="abc:DateOfBirth">
    <xsl:copy>
        <xsl:text>NewDOB</xsl:text>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>
<Documents>
    <Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <PersonalData>
            <Name>JACK</Name>
        </PersonalData>
        <DocumentXml>
            <Letter xmlns="http://example.com/abc-artifact" xsi:schemaLocation="http://example.com/abc-artifact.xsd" xsi:type="LetterType">
                <HeaderRecord>
                    <DateOfBirth>1971-11-07</DateOfBirth>
                </HeaderRecord>
            </Letter>
        </DocumentXml>
    </Document>
    <Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <PersonalData>
            <Name>TONJA</Name>
        </PersonalData>
        <DocumentXml>
            <Letter xmlns="http://example.com/abc-artifact" xsi:schemaLocation="http://example.com/abc-artifact.xsd" xsi:type="LetterType">
                <HeaderRecord>
                    <DateOfBirth>1974-22-10</DateOfBirth>
                </HeaderRecord>
            </Letter>
        </DocumentXml>
    </Document>
</Documents>
<xsl:stylesheet version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:abc="http://example.com/abc-artifact">
  <xsl:output indent="yes"/>
  <xsl:strip-space elements="*"/>

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

  <xsl:template match="abc:DateOfBirth">
    <xsl:copy>
      <xsl:text>NewDOB</xsl:text>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>
<Documents>
   <Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <PersonalData>
         <Name>JACK</Name>
      </PersonalData>
      <DocumentXml>
         <Letter xmlns="http://example.com/abc-artifact" xsi:schemaLocation="http://example.com/abc-artifact.xsd" xsi:type="LetterType">
            <HeaderRecord>
               <DateOfBirth>NewDOB</DateOfBirth>
            </HeaderRecord>
         </Letter>
      </DocumentXml>
   </Document>
   <Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <PersonalData>
         <Name>TONJA</Name>
      </PersonalData>
      <DocumentXml>
         <Letter xmlns="http://example.com/abc-artifact" xsi:schemaLocation="http://example.com/abc-artifact.xsd" xsi:type="LetterType">
            <HeaderRecord>
               <DateOfBirth>NewDOB</DateOfBirth>
            </HeaderRecord>
         </Letter>
      </DocumentXml>
   </Document>
</Documents>
<xsl:template match="abc:DateOfBirth/text()">
    <xsl:text>NewDOB</xsl:text>>
</xsl:template>