Java, XSLT: как обрабатывать динамические пространства имен, сгенерированные Axis в XSLT - PullRequest
1 голос
/ 18 июня 2009

У меня есть приложение, которое вызывает веб-сервис (на основе оси), чтобы получить ответ в следующем формате:

<?xml version="1.0"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Body>
        <axis2ns394:ServiceLevelDetailsResponse xmlns:axis2ns394="urn:myco:com:mapping:service:3.0">
            <ns1:errorFlag xmlns:ns1="urn:myco:com:mapping:service:3.0">false</ns1:errorFlag>
            <axis2ns394:customerProgram>
                <axis2ns394:name>ABC</axis2ns394:name>
                <axis2ns394:description>ABC SERVICES</axis2ns394:description>
                <axis2ns394:programRank>1</axis2ns394:programRank>
                <axis2ns394:bindOptions>
                    <axis2ns394:name>PRO1A</axis2ns394:name>
                    <axis2ns394:description>Complete Home Solution</axis2ns394:description>
                    <axis2ns394:programName>PROMO</axis2ns394:programName>
                    <axis2ns394:programDescription>Promotional Bundle 1A</axis2ns394:programDescription>
                </axis2ns394:bindOptions>
                <axis2ns394:bindOptions>
                    <axis2ns394:name>PRO2A</axis2ns394:name>
                    <axis2ns394:description>Buy 1 Get 1 Free</axis2ns394:description>
                    <axis2ns394:programName>PROMO</axis2ns394:programName>
                    <axis2ns394:programDescription>Promotional Bundle 2A</axis2ns394:programDescription>
                </axis2ns394:bindOptions>
            </axis2ns394:customerProgram>
        </axis2ns394:ServiceLevelDetailsResponse>
    </soapenv:Body>
</soapenv:Envelope>


Здесь - пространство имен 'axis2ns394' генерируется динамически во время выполнения. Мне нужно написать XSLT, чтобы свести этот XML к более простому XML (скажем, одна HTML-таблица с одной строкой для каждой customerProgram) Но я не уверен, как обращаться с этими динамическими пространствами имен.

Любая помощь будет принята с благодарностью.

С уважением,
- Ашиш

1 Ответ

4 голосов
/ 18 июня 2009

Является ли пространство имен динамическим или пространство имен префикс динамическим?

Фактическое пространство имен для XML: urn:myco:com:mapping:service:3.0

Итак, пример таблицы стилей для преобразования результатов не должен знать, что такое пространство имен prefix , а что такое пространство имен . Вы можете использовать другой префикс пространства имен в вашем XSLT, и он будет совпадать с элементами, если вы правильно объявите пространство имен .

Например, эта таблица стилей, объявляющая пространство имен префикс myco для пространства имен urn: myco: com: отображение: service: 3.0 :

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

<xsl:template match="/">
<table border="1">
<thead>
<tr>
 <th>Name</th>
 <th>Description</th>
 <th>Program Rank</th>
</tr>
</thead>
  <xsl:apply-templates select="//myco:customerProgram" />
</table>
</xsl:template>

<xsl:template match="myco:customerProgram">
<tr>
  <td>
   <xsl:value-of select="myco:name" />
  </td>
 <td>
   <xsl:value-of select="myco:description" />
  </td>
 <td>
   <xsl:value-of select="myco:programRank" />
  </td>

</tr>
</xsl:template>
</xsl:stylesheet>

Будет производить:

<table border="1">
<thead>
<tr>
<th>Name</th>
<th>Description</th>
<th>Program Rank</th>
</tr>
</thead>
<tbody>
<tr>
<td>ABC</td>
<td>ABC SERVICES</td>
<td>1</td>
</tr>
</tbody>
</table>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...