Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 引用另一个子节点的XLST_Xml_Xslt - Fatal编程技术网

Xml 引用另一个子节点的XLST

Xml 引用另一个子节点的XLST,xml,xslt,Xml,Xslt,我正在尝试添加引用另一个子节点的子节点。在下面的示例中,我想将从填充到。我这样做是因为MS Access只将子节点导入到单独的表中,而没有引用/链接表的方法 <AcctFncl xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="fsrv" xsi:schemaLocation="fsrv Rec.xsd" Version="27"> <CreateDate>20151101</CreateD

我正在尝试添加引用另一个子节点的子节点。在下面的示例中,我想将
填充到
。我这样做是因为MS Access只将子节点导入到单独的表中,而没有引用/链接表的方法

<AcctFncl xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="fsrv" xsi:schemaLocation="fsrv Rec.xsd" Version="27">
  <CreateDate>20151101</CreateDate>
  <EffectDate>20151031</EffectDate>
  <FnclRec>
    <AcctDtl>
      <MgmtCode>XXX</MgmtCode>
      <AcctID>123980</AcctID>      
    </AcctDtl>
    <Position>
      <FundID>5268</FundID>
      <TotalUnAssigned>50</TotalUnAssigned>
      <TotalAssigned>0</TotalAssigned>
      <AveCost>10</AveCost>
      <DivOpt>1</DivOpt>
    </Position>
   </FnclRec>
</AcctFncl>

20151101
20151031
XXX
123980
5268
50
0
10
1.
应该是这样的:

<AcctFncl xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="fsrv" xsi:schemaLocation="fsrv Rec.xsd" Version="27">
  <CreateDate>20151101</CreateDate>
  <EffectDate>20151031</EffectDate>
  <FnclRec>
    <AcctDtl>
      <MgmtCode>XXX</MgmtCode>
      <AcctID>123980</FundAcctID>      
    </AcctDtl>
    <Position>
      <AcctID>123980</AcctID>      
      <FundID>5268</FundID>
      <TotalUnAssigned>50</TotalUnAssigned>
      <TotalAssigned>0</TotalAssigned>
      <AveCost>10</AveCost>
      <DivOpt>1</DivOpt>
    </Position>
   </FnclRec>
</AcctFncl>

20151101
20151031
XXX
123980
123980
5268
50
0
10
1.

我一直在尝试创建一个XSLT来实现这一点,但我认为我在这方面做得太过火了

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <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="Position">
        <FundPosition>
            <AcctID><xsl:value-of select="../AcctDtl/CreateDate"/></AcctID>         
            <xsl:apply-templates select="@*|node()"/>
        </FundPosition>
    </xsl:template>
</xsl:stylesheet>

我认为您遇到的主要问题是,您的XML输入位于默认名称空间
fsrv
,但XSLT无法处理它

为了匹配XSLT中的这些元素,必须将该名称空间绑定到前缀,并在XPath中使用该前缀

在下面的示例中,我使用了前缀“
f
”,但您可以使用其他前缀

例如

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:f="fsrv">
  <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="f:Position">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()|../f:AcctDtl/f:AcctID"/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>


演示:

我认为您遇到的主要问题是,您的XML输入位于默认名称空间
fsrv
,但XSLT无法处理它

为了匹配XSLT中的这些元素,必须将该名称空间绑定到前缀,并在XPath中使用该前缀

在下面的示例中,我使用了前缀“
f
”,但您可以使用其他前缀

例如

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:f="fsrv">
  <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="f:Position">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()|../f:AcctDtl/f:AcctID"/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>


演示:

对不起,应该是123980。我的错误。XML来自第三方系统,我正试图将其导入MS Access,并在导入时使用一个键链接两个子表。Access导入单独的表,但没有用于链接它们的公用键。对不起,应该是123980。我的错误。XML来自第三方系统,我正试图将其导入MS Access,并在导入时使用一个键链接两个子表。Access导入单独的表,但没有公共键来链接它们。这很有效!我不确定名称空间到底是如何工作的(或者它在XML文件中是如何使用的),现在就阅读它,以便更好地理解它。还感谢您向我展示了xlstransform.net网站,与我现在使用的记事本++相比,它也非常有用…@NOCARRIER-非常欢迎您+第一个问题很好。下面是一些关于名称空间的好资源:这很有效!我不确定名称空间到底是如何工作的(或者它在XML文件中是如何使用的),现在就阅读它,以便更好地理解它。还感谢您向我展示了xlstransform.net网站,与我现在使用的记事本++相比,它也非常有用…@NOCARRIER-非常欢迎您+第一个问题很好。以下是一些关于名称空间的好资源: