Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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
XSLT:复制除属性包含值以外的所有XML 目标_Xml_Xslt_Xsd - Fatal编程技术网

XSLT:复制除属性包含值以外的所有XML 目标

XSLT:复制除属性包含值以外的所有XML 目标,xml,xslt,xsd,Xml,Xslt,Xsd,我想复制所有XML,除非属性值包含特定字符,在本例中为。如果存在,请删除具有该属性的元素及其所有子元素。我对xslt非常陌生,读过一些书,但似乎找不到一种方法来抓住父级+它的所有子级 当前XSL 示例XML 所需的输出XML 这看起来是正确的方法(一个标识模板,为您要删除的内容覆盖),但您不能在匹配模式中使用后代或self::。然而,你不需要,只是 <xsl:template match="root/*[contains(@name, '.')]" /> <?xml

我想复制所有XML,除非属性值包含特定字符,在本例中为
。如果存在
,请删除具有该属性的元素及其所有子元素。我对xslt非常陌生,读过一些书,但似乎找不到一种方法来抓住父级+它的所有子级

当前XSL

示例XML

所需的输出XML
这看起来是正确的方法(一个标识模板,为您要删除的内容覆盖),但您不能在匹配模式中使用
后代或self::
。然而,你不需要,只是

<xsl:template match="root/*[contains(@name, '.')]" />
<?xml version="1.0" encoding="UTF-8"?>
<root>
    <complexType name="tableData2File">
        <complexContent>
            <extension base="taskElement">
                <sequence>
                    <element name="source" type="tableData2File.source" />
                    <element name="parser" type="parser" />
                    <element name="target" type="node.uri" />
                </sequence>
                <attribute name="addNewColumns" type="minlength" use="optional" />                              
            </extension>
        </complexContent>
    </complexType>

    <!-- 
    match idViolationsCount.test,
    then remove all its content
     -->
    <complexType name="idViolationsCount.test">
        <complexContent>
            <extension base="tableTask">
                <sequence>
                    <element name="index" type="columnsNoAs" minOccurs="1" />
                    <element name="condition" type="stringWithRef" minOccurs="0" />
                    <element name="allowExpressions" type="boolWithRef" minOccurs="0" />
                </sequence>
                <attribute name="mode" type="mergeMode" use="required" />
            </extension>
        </complexContent>
    </complexType>

</root>
<root>
    <complexType name="tableData2File">
        <complexContent>
            <extension base="taskElement">
                <sequence>
                    <element name="source" type="tableData2File.source" />
                    <element name="parser" type="parser" />
                    <element name="target" type="node.uri" />
                </sequence>
                <attribute name="addNewColumns" type="minlength" use="optional" />                              
            </extension>
        </complexContent>
    </complexType>

    <!-- no idViolationsCount.test! --> 
</root>
<xsl:template match="root/*[contains(@name, '.')]" />
<xsl:template match="root/*[contains(@name, '.')]">
  <!-- don't output anything now, but keep processing children -->
  <xsl:apply-templates />
</xsl:template>