1

刚开始编码。属性值设置似乎不起作用,并且外部 for-each 循环中引用节点的子节点未访问。我无法弄清楚代码有什么问题。

<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <B2BGatewayDoc>
      <Document>
        <xsl:copy-of select="/B2BGatewayDoc/Document/ServiceHeader" />
        <ServiceContent>
          <Transmission>
            <TransmissionBody>
              <xsl:copy-of select="/B2BGatewayDoc/Document/ServiceContent/Transmission/TransmissionBody/ReceiverSystem" />
              <xsl:for-each select="/B2BGatewayDoc/Document/ServiceContent/Transmission/TransmissionBody/GLogXMLElement" >
                <GLogXMLElement>
                  <ActualShipment>
                    <xsl:attribute name="xmlns" >
                      <xsl:value-of select="ActualShipment/@xmlns" />
                    </xsl:attribute>
                    <Shipment>
                      <xsl:copy-of select="ActualShipment/Shipment/ShipmentHeader" />
                      <xsl:for-each select="ActualShipment/Shipment/TransOrder" >
                        <TransOrder>
                          <xsl:copy-of select="TransOrderHeader" />
                        </TransOrder>
                      </xsl:for-each>
                    </Shipment>
                  </ActualShipment>
                </GLogXMLElement>
              </xsl:for-each>
            </TransmissionBody>
          </Transmission>
        </ServiceContent>
      </Document>
    </B2BGatewayDoc>
  </xsl:template>
</xsl:stylesheet>

XML 示例

<?xml version="1.0"?>
<B2BGatewayDoc>
  <Document>
    <ServiceHeader>
      <Protocol name="ANSIX12">
        <Sender>941714834TEST</Sender>
        <Receiver>003897733SAPT</Receiver>
        <MsgType>3A4MG2</MsgType>
        <ReferenceNumber/>
        <PipVersion>V02.02</PipVersion>
        <InstanceIdentifier/>
      </Protocol>
    </ServiceHeader>
    <ServiceContent>
      <Transmission>
        <TransmissionBody>
          <ReceiverSystem>
            <ReceiverSystemName>XXXXX</ReceiverSystemName>
            <ReceiverSystemName>YYYYY</ReceiverSystemName>
          </ReceiverSystem>
          <GLogXMLElement>
            <ActualShipment xmlns="1000181ZZZ">
              <Shipment>
                <ShipmentHeader>
                  <ShipmentGid>
                    <Gid>
                      <Xid>1000181ZZZ</Xid>
                    </Gid>
                  </ShipmentGid>
                  <ShipmentRefnum>
                    <ShipmentRefnumQualifierGid>
                      <Gid>
                        <Xid>SELLER_INV_NBR</Xid>
                      </Gid>
                    </ShipmentRefnumQualifierGid>
                    <ShipmentRefnumValue>VALUE 1</ShipmentRefnumValue>
                  </ShipmentRefnum>
                  <ShipmentRefnum>
                    <ShipmentRefnumQualifierGid>
                      <Gid>
                        <Xid>SHIP_TYPE</Xid>
                      </Gid>
                    </ShipmentRefnumQualifierGid>
                    <ShipmentRefnumValue>O</ShipmentRefnumValue>
                  </ShipmentRefnum>
                  <TransactionCode>IU</TransactionCode>
                  <TotalShipUnitCount>1</TotalShipUnitCount>
                  <TotalPackagedItemSpecCount>1</TotalPackagedItemSpecCount>
                  <CommercialTerms>
                    <IncoTermGid>
                      <Gid>
                        <Xid>EXW</Xid>
                      </Gid>
                    </IncoTermGid>
                  </CommercialTerms>
                  <NumOrderReleases>1</NumOrderReleases>
                  <VesselGid>
                    <Gid>
                      <Xid>BOL54891</Xid>
                    </Gid>
                  </VesselGid>
                </ShipmentHeader>
                <TransOrder>
                  <TransOrderHeader>
                    <TransOrderGid>
                      <Gid>
                        <Xid>BR20000238</Xid>
                      </Gid>
                    </TransOrderGid>
                    <CommercialTerms>
                      <IncoTermGid>
                        <Gid>
                          <Xid>EXW</Xid>
                        </Gid>
                      </IncoTermGid>
                    </CommercialTerms>
                    <TransportModeGid>
                      <Gid>
                        <Xid>H</Xid>
                      </Gid>
                    </TransportModeGid>
                    <ModeProfileGid>
                      <Gid>
                        <Xid/>
                      </Gid>
                    </ModeProfileGid>
                    <OrderRefnum>
                      <OrderRefnumQualifierGid>
                        <Gid>
                          <Xid>BOL</Xid>
                        </Gid>
                      </OrderRefnumQualifierGid>
                      <OrderRefnumValue>BOL54891</OrderRefnumValue>
                    </OrderRefnum>
                    <OrderRefnum>
                      <OrderRefnumQualifierGid>
                        <Gid>
                          <Xid>CUST_PO_NBR</Xid>
                        </Gid>
                      </OrderRefnumQualifierGid>
                      <OrderRefnumValue>4700175047</OrderRefnumValue>
                    </OrderRefnum>
                    <TotalNetWeightVolume>
                      <Weight>
                        <WeightValue>18.9</WeightValue>
                        <WeightUOMGid>
                          <Gid>
                            <Xid>KG</Xid>
                          </Gid>
                        </WeightUOMGid>
                      </Weight>
                      <Volume>
                        <VolumeValue>0</VolumeValue>
                        <VolumeUOMGid>
                          <Gid>
                            <Xid>CR</Xid>
                          </Gid>
                        </VolumeUOMGid>
                      </Volume>
                    </TotalNetWeightVolume>
                  </TransOrderHeader>
                </TransOrder>
              </Shipment>
            </ActualShipment>
          </GLogXMLElement>
        </TransmissionBody>
      </Transmission>
    </ServiceContent>
  </Document>
</B2BGatewayDoc>

我得到的输出

<?xml version='1.0' ?>
<B2BGatewayDoc>
  <Document>
    <ServiceHeader>
      <Protocol name="ANSIX12">
        <Sender>941714834TEST</Sender>
        <Receiver>003897733SAPT</Receiver>
        <MsgType>3A4MG2</MsgType>
        <ReferenceNumber/>
        <PipVersion>V02.02</PipVersion>
        <InstanceIdentifier/>
      </Protocol>
    </ServiceHeader>
    <ServiceContent>
      <Transmission>
        <TransmissionBody>
          <ReceiverSystem>
            <ReceiverSystemName>XXXXX</ReceiverSystemName>
            <ReceiverSystemName>YYYYY</ReceiverSystemName>
          </ReceiverSystem>
          <GLogXMLElement>
            <ActualShipment xmlns="">
              <Shipment/>
            </ActualShipment>
          </GLogXMLElement>
        </TransmissionBody>
      </Transmission>
    </ServiceContent>
  </Document>
</B2BGatewayDoc>

xmlns尽管源值可用,但未为属性分配值。Shipment不会创建标签中的所有节点和标签。

任何指向理性的指针都受到高度赞赏。

4

1 回答 1

1

对于正式错误,Visual Studio 说,无法创建具有本地名称“xmlns”和空命名空间 URI 的属性。这是有道理的——你不会像这样创建命名空间。

即使您可以为输出动态生成名称空间,它仍然无法工作,因为您的 XSL 模板将无法查询数据文件。在您的数据中,您拥有的<ActualShipment xmlns="1000181ZZZ">所有节点ActualShipment都具有命名空间1000181ZZZ,并且您必须将该命名空间放入您的 XSL 中。否则,XSL 会查找具有空白名称空间的节点,但找不到任何节点——所有节点的名称空间都是1000181ZZZ. 要从 XSL 查询,您需要添加xmlns:something="1000181ZZZ"到您的声明中<xsl:stylesheet>

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

然后像这样在 xPath 中使用它:

<Shipment>
  <xsl:copy-of select="something:ActualShipment/something:Shipment/something:ShipmentHeader" />
  <xsl:for-each select="something:ActualShipment/something:Shipment/something:TransOrder" >
    <TransOrder>
      <xsl:copy-of select="something:TransOrderHeader" />
    </TransOrder>
  </xsl:for-each>
</Shipment>

您不应该使用变量之类的名称空间。他们应该是事先知道的。

一个明显的解决方法是<ActualShipment xmlns="1000181ZZZ">用类似<ActualShipment some_attribute="1000181ZZZ">.

于 2013-08-03T11:02:35.907 回答