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 反向结构位置XSLT_Xml_Xslt_Xml Parsing - Fatal编程技术网

Xml 反向结构位置XSLT

Xml 反向结构位置XSLT,xml,xslt,xml-parsing,Xml,Xslt,Xml Parsing,我想要一些技巧来完成反向结构: XML已编辑,太大,无法在此处发布 如下所示的输入有标题和正文,正文有事件列表,对象事件和聚合事件 输入XML: <Document> <Header /> <Body> <EventList> --> <ObjectEvent> --> <eventTime>2018-09-06T08:51:24Z</eventTime&

我想要一些技巧来完成反向结构:

XML
已编辑,太大,无法在此处发布

如下所示的输入有
标题
正文
正文
事件列表
对象事件
聚合事件

输入XML:

<Document>
  <Header />
<Body>
    <EventList>
        --> <ObjectEvent>
            --> <eventTime>2018-09-06T08:51:24Z</eventTime>
        --> </ObjectEvent>
        <AggregationEvent>
            <eventTime>2018-09-06T08:51:24Z</eventTime>
        </AggregationEvent>
        <AggregationEvent>
            <eventTime>2018-09-06T08:51:24Z</eventTime>
        </AggregationEvent>
        <AggregationEvent>
            <eventTime>2018-09-06T08:51:24Z</eventTime>
        </AggregationEvent>
    </EventList>
</Body>
</Document>
起始点
XSLT
无需逻辑:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

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

<xsl:template match="//AggregationEvent">
    <xsl:copy>
        <xsl:apply-templates />
    </xsl:copy>
</xsl:template>
</xsl:stylesheet>

谢谢你的投入


请注意,

您使用标识模板以正确的方式开始。不过,您应该在另一个模板上执行的操作是在父级
事件列表上进行匹配,然后按照您喜欢的顺序选择子节点

试试这个XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" indent="yes" />

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

<xsl:template match="EventList">
    <xsl:copy>
        <xsl:apply-templates select="AggregationEvent" />
        <xsl:apply-templates select="ObjectEvent" />
    </xsl:copy>
</xsl:template>
</xsl:stylesheet>
如果您使用的是XSLT 3.0,您可以用以下内容替换标识模板

<xsl:mode on-no-match="shallow-copy"/>


…您当然也有一些XSLT要展示吗?我没有。我刚刚开始我在上面发布的东西。再次感谢蒂姆!它可以根据需要工作。亲切的问候。
<xsl:apply-templates select="AggregationEvent, ObjectEvent" />
<xsl:mode on-no-match="shallow-copy"/>