Пространства имен XSL и вложенный xsl: for-each - PullRequest
0 голосов
/ 06 июня 2011

У меня ниже XML и я хотел бы перебрать элемент как таковой, чтобы я мог отобразить его в некотором формате, например:

PIN 1<br/>
&nbsp;&nbsp;  XYZ<br/>
&nbsp;&nbsp;  HELLO<br/>

PIN 2<br/>
&nbsp;&nbsp;  ABC<br/>
&nbsp;&nbsp;  HI<br/>

XML:

<RootResponse xmlns:ip="urn:domain:tx:inPayment" xmlns:ipn="urn:domain:tx:Pin">
   <OutBoundMessage>
      <ip:InfoMessage>
        <ipn:Alert>PIN 1</ipn:Alert>
         <ipn:Code>
           <ip:CodeLabel>XYZ</ip:CodeLabel>
           <ip:CodeMessage>HELLO</ip:CodeMessage>
         </ipn:Code>
      </ip:InfoMessage>

      <ip:InfoMessage>
         <ipn:Code>
           <ipn:Alert>PIN 2</ipn:Alert>
           <ip:CodeLabel>ABC</ip:CodeLabel>
           <ip:CodeMessage>HI</ip:CodeMessage>
         </ipn:Code>
      </ip:InfoMessage>
  </OutBoundMessage>
</RootResponse>

Я могу 'Кажется, я не нашел решения.Любое предложение?

Ответы [ 2 ]

1 голос
/ 06 июня 2011

Я бы порекомендовал следовать учебнику по XSLT для школ W3C , это даст вам все необходимое для решения этой относительно простой проблемы XSLT.

Вы правы, что вам придется обращать внимание на пространства имен, хотя, опять же, это довольно просто. Просто убедитесь, что ваш XSLT определяет необходимые пространства имен и что вы соответствующим образом добавляете имена элементов в свои операторы XPath. Смотрите следующее:

Пространства имен XML и их влияние на XPath и XSLT

0 голосов
/ 06 июня 2011

Вы должны объявить пространства имен в вашем XSLT, а затем использовать объявленный префикс в ваших выражениях.

Ниже приведен пример того, как это сделать, используя шаблоны (например, «стиль нажатия») вместо xsl:for-each (например, «стиль вывода»).

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ip="urn:domain:tx:inPayment"
xmlns:ipn="urn:domain:tx:Pin"
exclude-result-prefixes="ip ipn">
    <xsl:output indent="yes" />

    <xsl:template match="ipn:Alert">
        <xsl:text>&#xA;</xsl:text>
        <xsl:apply-templates />
        <br/>
    </xsl:template>

    <xsl:template match="ip:*[starts-with(local-name(),'Code')]">
        <xsl:text>&#xA;&#160;&#160;</xsl:text>
        <xsl:apply-templates/>
        <br/>
    </xsl:template>

</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...