Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/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_Xml_Xslt - Fatal编程技术网

使用元素和属性展平xml

使用元素和属性展平xml,xml,xslt,Xml,Xslt,这只是我的第二个XSLT,我一直在做它,但它仍然非常绿色 我有这样的xml: <?xml version="1.0" encoding="utf-8"?> <cyber:AOI_INFO xmlns:cyber="http://www.cyberoptics.com/AOI/measure" xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance" xsi:schemaLocation="http://www.cybe

这只是我的第二个XSLT,我一直在做它,但它仍然非常绿色

我有这样的xml:

<?xml version="1.0" encoding="utf-8"?>
<cyber:AOI_INFO xmlns:cyber="http://www.cyberoptics.com/AOI/measure" 
xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance" 
xsi:schemaLocation="http://www.cyberoptics.com/AOI/measure c:/xml/Measure.xsd">
    <UserName>Machine1\User</UserName>
    <SystemId>MACHINE1</SystemId>
    <AOIVersion>4.2.1.24</AOIVersion>
    <InspectionType>Inspection</InspectionType>
    <PositionUnit>Millimeter</PositionUnit>
    <RotationUnit>Degree</RotationUnit>
    <XYOffsetReference>FeatureOrientation</XYOffsetReference>
    <CoplanarityUnit>Angle</CoplanarityUnit>
    <Panel Id="4" Name="Panel" PanelStatus="Failed" StartTime="07/09/2018 
    11:25:53" EndTime="07/09/2018 11:27:40" CycleTime="46" TotalFeatures="10804" 
    TotalComponents="10804" LotCode="New Lot" LotSize="0" Barcode="Failed to Read 
    Barcode" Code="Failed to Read Barcode" NG_Stacker_SlotNumber="">
        <RecipeName>11047-01_OP10_WFR4_R2</RecipeName>
        <RecipeLastUpdateTime></RecipeLastUpdateTime>
        <CAD>D:\Panel.XML</CAD>
        <PanelResult>
            <Attributes>
                <FailedBoards Value="1" />
                <FailedComponents Value="16" />
                <FailedFeatures Value="16" />
            </Attributes>
        </PanelResult>
        <Feature Id="32424" Identifier="BC1" Status="Failed" Value="Failed to Read Barcode" />
        <Board Id="1" Name="Board1" BoardStatus="Failed" TotalFeatures="10804" TotalComponents="10804" Barcode="" Skip="false">
            <BoardResult>
                <Attributes>
                    <FailedComponents Value="16" />
                    <FailedFeatures Value="16" />
                </Attributes>
            </BoardResult>
            <Feature Id="2" Identifier="FID0" Status="Passed" />
            <Feature Id="3" Identifier="FID1" Status="Passed" />
            <Feature Id="4" Identifier="FID2" Status="Passed" />
            <Feature Id="5" Identifier="FID3" Status="Passed" />
            <Component Id="6" Name="D1" PartNumber="PAD" Package="PAD" Barcode="" IncludedInCurrentVariant="false" ComponentStatus="Passed" TotalFeatures="1">
                <ComponentResult>
                    <Attributes>
                        <FailedFeatures Value="0" />
                    </Attributes>
                </ComponentResult>
                <Feature Id="21606" Identifier="Body1" FeatureStatus="Passed" FeatureInspectionInfo="" MeasurementValid="">
                    <FeatureResult>
                        <Inspection Identifier="FeatureLocator" Type="AI2" status="Passed">
                            <Measurements>
                                <ConfidenceLevel Value="95.292820242958172" Minimum="1" Maximum="100" Target="35" />
                                <Polarity IsFailed="false" />
                            </Measurements>
                        </Inspection>
                        <Inspection Identifier="X-POSITION" Type="GeometryMeasurement" status="Passed">
                            <Measurements>
                                <ParallelLine Distance="0.24886200808679954" MinDistance="0.23" MaxDistance="0.27" Angle="0.14772531447994211" MaxAngle="90" />
                            </Measurements>
                        </Inspection>
                        <Inspection Identifier="Pad-Gap" Type="GeometryMeasurement" status="Passed">
                            <Measurements>
                                <ParallelLine Distance="0.058603726806744492" MinDistance="0.048" MaxDistance="0.08" Angle="0.70909905503968329" MaxAngle="90" />
                            </Measurements>
                        </Inspection>
                        <Inspection Identifier="SR-Opening" Type="GeometryMeasurement" status="Passed">
                            <Measurements>
                                <Deviation Value="0.0340010927630135" Threshold="0.5" Type="RMS" />
                                <Diameter Value="0.55804347481393268" Min="0.4" Max="0.7" />
                            </Measurements>
                        </Inspection>
                        <Inspection Identifier="Appearance" Type="AI2" status="Passed">
                            <Measurements>
                                <ConfidenceLevel Value="94.1349731217522" Minimum="1" Maximum="100" Target="50" />
                                <Polarity IsFailed="false" />
                            </Measurements>
                        </Inspection>
                    </FeatureResult>
                </Feature>
            </Component>
            <BoardPostMeasurementResult Result="Passed" />
        </Board>
        <PanelPostMeasurementResult Result="Passed" />
    </Panel>
</cyber:AOI_INFO>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="*[parent::*]">
        <xsl:element name="{local-name()}">
        <xsl:for-each select="attribute::*">
            <xsl:element name="{local-name()}">
                <xsl:value-of select="."/>
            </xsl:element>
        </xsl:for-each>
        </xsl:element>
        <xsl:apply-templates select="node()" />
    </xsl:template>
</xsl:stylesheet>
请注意,某些父元素(如PanelResult和BoardResult)的子元素和展开属性周围没有标记

我敢肯定,让它们像应该的那样围绕它们的子属性是一件非常简单的事情。然而,我玩了很长时间,我的想法都快用完了

希望有人能认识到我在XSLT中的错误,并为我指明正确的方向

谢谢! 杰里


对不起,我想一些额外的细节会有所帮助。这就是我得到的:

<CAD/>D:\Panel.XML
    <PanelResult/>
        <Attributes/>
            <FailedBoards><Value>1</Value></FailedBoards>
            <FailedComponents><Value>16</Value></FailedComponents>
            <FailedFeatures><Value>16</Value></FailedFeatures>
D:\Panel.XML
1.
16
16
这就是我想要的:

    <CAD>D:\Panel.XML</CAD>
    <PanelResult>
        <Attributes>
            <FailedBoards><Value>1</Value></FailedBoards>
            <FailedComponents><Value>16</Value></FailedComponents>
            <FailedFeatures><Value>16</Value></FailedFeatures>
        </Attributes>
    </PanelResult>
D:\Panel.XML
1.
16
16

如果我理解正确,您只需要将属性替换为具有相同名称的元素,仅嵌套在其原始父级下的
属性
元素下

这应该可以做到:看


说明: 模板1 i、 e.(
match=“@*|node()”

匹配所有内容并按原样复制内容,必要时将模板应用于该内容

模板2 i、 e.(
match=“element()[./@*[名称空间-uri()!=”http://www.w3.org/2000/10/XMLSchema-instance'和名称空间-uri()!='xmlns']]“

  • 匹配至少包含一个属性*的任何元素
  • 通过在元素上进行匹配,可以确保我们只为该元素创建一次
    Attributes
    标记,而不是为每个属性创建一次
    • 注意:在匹配条件下,我过滤掉任何带有命名空间uri的内容,以避免删除命名空间定义,并过滤
      xsi
      的uri以避免删除标准XML定义;因为这些属性有一个目的,但在元素中可能不需要
模板3 i、 e.(
@*[namespace-uri()!='http://www.w3.org/2000/10/XMLSchema-instance'和名称空间-uri()!='xmlns']


这将匹配属性本身,并将它们转换为元素。

在这里删除名称空间是一个巨大的危险信号。你为什么要这么做?还不清楚你想要的结果,你可以考虑给我们一个缩小的样本来证明这个问题。如果您将
移动到
xsl:element
中,您将获得元素中的内容,但不清楚您何时需要该内容以及何时需要“展平”。对不起,我认为更多细节会更好。请看更新。我认为“展平”是指你想将所有属性转换为元素,对吗?这是正确的。我想我的术语可能有误,但本质上就是这样。我想要的是每个元素都包含任何元素和值以及作为元素设置的属性。这就做到了!非常感谢你的帮助!我注意到层次结构并没有完全保留。看起来我让每个元素都独立存在。例如,board元素实际上封装了组件、功能和各种测量值。@JerryK你是说上述内容并不能完全解决你的问题吗?如果没有,请你提供更多关于这个问题的信息(最好有例子),因为我很可能误解了这个问题。。。提前谢谢。看来我在复制你的示例时做错了什么。当我把它全部复制好的时候,它看起来真的很完美。再次感谢。
    <CAD>D:\Panel.XML</CAD>
    <PanelResult>
        <Attributes>
            <FailedBoards><Value>1</Value></FailedBoards>
            <FailedComponents><Value>16</Value></FailedComponents>
            <FailedFeatures><Value>16</Value></FailedFeatures>
        </Attributes>
    </PanelResult>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

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

    <xsl:template match="element()[./@*[namespace-uri() != 'http://www.w3.org/2000/10/XMLSchema-instance' and namespace-uri() != 'xmlns' ]]">
        <xsl:copy>
            <Attributes>
                <xsl:apply-templates select="./@*" />    
            </Attributes>
            <xsl:apply-templates select="./*" />
        </xsl:copy>
    </xsl:template>


    <xsl:template match="@*[namespace-uri() != 'http://www.w3.org/2000/10/XMLSchema-instance' and namespace-uri() != 'xmlns' ]">
        <xsl:element name="{local-name()}">
            <xsl:value-of select="."/>
        </xsl:element>
    </xsl:template>

</xsl:stylesheet>