Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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 如果;匹配“;其他的_Xml_Xslt_Xslt 1.0_Xslt 2.0 - Fatal编程技术网

Xml 如果;匹配“;其他的

Xml 如果;匹配“;其他的,xml,xslt,xslt-1.0,xslt-2.0,Xml,Xslt,Xslt 1.0,Xslt 2.0,在XSLT中,我经常使用以下命令匹配节点 <xsl:template match="*[local-name() = 'Proposal']/*[local-name() = 'ApplicationData']"> 从中获取节点 <?xml version="1.0" encoding="utf-8"?><?xfa generator="XFA2_4" APIVersion="2.8.9029.0"?> <xdp:xdp xmlns:xd

在XSLT中,我经常使用以下命令匹配节点

<xsl:template match="*[local-name() = 'Proposal']/*[local-name() = 'ApplicationData']">

从中获取节点

<?xml version="1.0" encoding="utf-8"?><?xfa generator="XFA2_4" APIVersion="2.8.9029.0"?>
    <xdp:xdp xmlns:xdp="http://ns.adobe.com/xdp/" timeStamp="2013-03-01T09:48:58Z" uuid="3e3468da-104d-4532-8077-0dc001ca166b">
       <xfa:datasets xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/">
          <xfa:data>
             <Proposal xmlns="http://www.govtalk.gov.uk/planning/OneAppProposal-2006" Version="">
                 <oneapp:ApplicationData xmlns:oneapp="http://www.govtalk.gov.uk/planning/OneAppProposal-2006">
                        <oneapp:TreesHedgesWales/>
                        <oneapp:OtherLowCarbonEnergy/>
                 </oneapp:ApplicationData>
             </Proposal>
         ...

...
匹配

<oneapp:ApplicationData xmlns:oneapp="http://www.govtalk.gov.uk/planning/OneAppProposal-2006">
      <oneapp:TreesHedgesWales/>
      <oneapp:OtherLowCarbonEnergy/>
 </oneapp:ApplicationData>


如何确定应用程序数据是否存在,如果不存在,则插入它?

您需要将逻辑添加到与“建议”元素匹配的模板中

<xsl:template match="*[local-name() = 'Proposal']">
如果希望保留
建议
元素,则需要将其包装在
xsl:copy

如果XSLT中还没有与
提案
匹配的现有模板,则可以将测试添加到模板匹配本身

<xsl:template match="*[local-name() = 'Proposal'][not(*[local-name() = 'ApplicationData'])]">
   <xsl:copy>
      <oneapp:ApplicationData xmlns:oneapp="http://www.govtalk.gov.uk/planning/OneAppProposal-2006">
          <oneapp:TreesHedgesWales/>
          <oneapp:OtherLowCarbonEnergy/>
      </oneapp:ApplicationData>
   </xsl:copy>
</xsl:template>

正如michael.hor257k在评论中提到的,如果您在XSLT中声明名称空间,并在匹配中使用名称空间前缀,那么会更干净

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
     xmlns:oneapp="http://www.govtalk.gov.uk/planning/OneAppProposal-2006">

<xsl:template match="oneapp:Proposal[not(oneapp:ApplicationData)]">
   <xsl:copy>
      <oneapp:ApplicationData>
         <oneapp:TreesHedgesWales/>
         <oneapp:OtherLowCarbonEnergy/>
      </oneapp:ApplicationData>
   </xsl:copy>
</xsl:template>


您的问题不清楚。把它插在哪里?从哪里来顺便说一句,为什么不使用给定的名称空间,而不是可怕的
*[local-name()='xyz']
?将其插入XML。。。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
     xmlns:oneapp="http://www.govtalk.gov.uk/planning/OneAppProposal-2006">

<xsl:template match="oneapp:Proposal[not(oneapp:ApplicationData)]">
   <xsl:copy>
      <oneapp:ApplicationData>
         <oneapp:TreesHedgesWales/>
         <oneapp:OtherLowCarbonEnergy/>
      </oneapp:ApplicationData>
   </xsl:copy>
</xsl:template>