【发布时间】:2017-04-11 08:19:24
【问题描述】:
我有这个需要样式的 xml,但我什至无法让 for.each 正常工作:我尝试,对于每个 CONNECTIVITY_MESSAGE_LINE,如果 NAME 是 'HEADER' 然后...
我需要帮助开始...这样我至少可以得到正确的陈述,我已经阅读并阅读...
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:element name="SEPA_HEADER">
<xsl:value-of select=". = HEADER"/>
<xsl:if test="*//NAME[text() = 'HEADER']">
<p>x</p>
</xsl:if>
<xsl:for-each select="CONNECTIVITY_MESSAGE/MESSAGE_LINE/CONNECTIVITY_MESSAGE_LINE">
<P>1</P>
<xsl:choose>
<xsl:when test="//NAME[text() = 'HEADER']">
<P>CHOOSE</P>
</xsl:when>
<xsl:otherwise>
<p>123</p>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
我用的是VS2013
我讨厌的 xml:
<?xml version="1.0" encoding="UTF-8"?>
<CONNECTIVITY_MESSAGE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:ifsworld-com:connectivity_message" ID="CONNECTIVITY_MESSAGE-6.0">
<APPLICATION_MESSAGE_ID>N/A</APPLICATION_MESSAGE_ID>
<APPLICATION_RECEIVER_ID>N/A</APPLICATION_RECEIVER_ID>
<CLASS_ID>ISO20022</CLASS_ID>
<CONNECTIVITY_VERSION>2.1.0</CONNECTIVITY_VERSION>
<EXEC_TIME>2017-04-06T15:20:49</EXEC_TIME>
<MEDIA_CODE>EDI</MEDIA_CODE>
<OBJSTATE>Released</OBJSTATE>
<RECEIVER>BANK</RECEIVER>
<SENDER>IFS</SENDER>
<STATE>Released</STATE>
<VERSION>N/A</VERSION>
<MESSAGE_LINES>
<CONNECTIVITY_MESSAGE_LINE>
<C01>ORDER_ID</C01>
<C02>MESSAGE_ID</C02>
<C03>CONTROL_SUM</C03>
<C04>PURCHASENO</C04>
<MESSAGE_LINE>1.0</MESSAGE_LINE>
<NAME>HEADER</NAME>
<STATE>Posted</STATE>
</CONNECTIVITY_MESSAGE_LINE>
<CONNECTIVITY_MESSAGE_LINE>
<C01>P1</C01>
<C02>line_rec_.Line_No</C02>
<MESSAGE_LINE>2.0</MESSAGE_LINE>
<NAME>PAYMENT</NAME>
<STATE>Posted</STATE>
</CONNECTIVITY_MESSAGE_LINE>
<CONNECTIVITY_MESSAGE_LINE>
<C01>P1</C01>
<C02>T1.1</C02>
<MESSAGE_LINE>3.0</MESSAGE_LINE>
<NAME>TRANS</NAME>
<STATE>Posted</STATE>
</CONNECTIVITY_MESSAGE_LINE>
<CONNECTIVITY_MESSAGE_LINE>
<C01>P1</C01>
<C02>T1.2</C02>
<MESSAGE_LINE>4.0</MESSAGE_LINE>
<NAME>TRANS</NAME>
<STATE>Posted</STATE>
</CONNECTIVITY_MESSAGE_LINE>
<CONNECTIVITY_MESSAGE_LINE>
<C01>P1</C01>
<C02>T1.3</C02>
<MESSAGE_LINE>5.0</MESSAGE_LINE>
<NAME>TRANS</NAME>
<STATE>Posted</STATE>
</CONNECTIVITY_MESSAGE_LINE>
<CONNECTIVITY_MESSAGE_LINE>
<C01>P2</C01>
<C02>line_rec_.Line_No</C02>
<MESSAGE_LINE>6.0</MESSAGE_LINE>
<NAME>PAYMENT</NAME>
<STATE>Posted</STATE>
</CONNECTIVITY_MESSAGE_LINE>
<CONNECTIVITY_MESSAGE_LINE>
<C01>P2</C01>
<C02>T2.1</C02>
<MESSAGE_LINE>7.0</MESSAGE_LINE>
<NAME>TRANS</NAME>
<STATE>Posted</STATE>
</CONNECTIVITY_MESSAGE_LINE>
<CONNECTIVITY_MESSAGE_LINE>
<C01>P2</C01>
<C02>T2.2</C02>
<MESSAGE_LINE>8.0</MESSAGE_LINE>
<NAME>TRANS</NAME>
<STATE>Posted</STATE>
</CONNECTIVITY_MESSAGE_LINE>
<CONNECTIVITY_MESSAGE_LINE>
<C01>P3</C01>
<C02>line_rec_.Line_No</C02>
<MESSAGE_LINE>9.0</MESSAGE_LINE>
<NAME>PAYMENT</NAME>
<STATE>Posted</STATE>
</CONNECTIVITY_MESSAGE_LINE>
<CONNECTIVITY_MESSAGE_LINE>
<C01>P3</C01>
<C02>T3.1</C02>
<MESSAGE_LINE>10.0</MESSAGE_LINE>
<NAME>TRANS</NAME>
<STATE>Posted</STATE>
</CONNECTIVITY_MESSAGE_LINE>
<CONNECTIVITY_MESSAGE_LINE>
<C01>P3</C01>
<C02>T3.2</C02>
<MESSAGE_LINE>11.0</MESSAGE_LINE>
<NAME>TRANS</NAME>
<STATE>Posted</STATE>
</CONNECTIVITY_MESSAGE_LINE>
<CONNECTIVITY_MESSAGE_LINE>
<C01>P3</C01>
<C02>T3.3</C02>
<MESSAGE_LINE>12.0</MESSAGE_LINE>
<NAME>TRANS</NAME>
<STATE>Posted</STATE>
</CONNECTIVITY_MESSAGE_LINE>
</MESSAGE_LINES>
</CONNECTIVITY_MESSAGE>
【问题讨论】:
-
我现在用
找到了 chils 节点的值我注意到所有的输出 xml 都在一行中......有什么想法吗? -
您的 CONNECTIVITY_MESSAGE 节点中似乎有 xmlns:xsi="w3.org/2001/XMLSchema-instance" xmlns="urn:ifsworld-com:connectivity_message" ID="CONNECTIVITY_MESSAGE-6.0"导致处理问题是源 xml 中必需的那些属性吗?
-
我已经删除了 linie 并且知道至少我可以使用一些 xpath 语法。
-
@Lise 无需修改您的 XML; XSLT 可以处理任何 XML 输入。请参阅:stackoverflow.com/questions/34758492/…您的尝试还有其他问题,但这会给您一个开始。