xml и xslt помогают? - PullRequest
       1

xml и xslt помогают?

1 голос
/ 01 ноября 2011
<table name="ASSETS_TABLE" statement-type="INSERT"> 
    <column name="ASSET_ID">string(/assets/asset/value())</column> 
    <column name="ASSET_VALUE"> 
    <option name="VALUE_GREATER_THEN_0">/assets/asset > 0</option> 
    <option name="VALUE_LESS_THEN_0">/assets/asset < 0</option> 
    <option name="OTHERWISE">1</option> 
    </column> 
    <column name="ASSET_DESCRIPTION">string(/assets/asset/text())</column> 
    </table>

Из приведенного выше XML мне нужно получить значения атрибутов (то есть имя).Для узлов столбцов и опций, как бы вы могли использовать цикл для получения значения атрибута и использовать его в качестве имени элемента или имени переменной и значение узла столбца в качестве значения нового элемента или переменной.

Так что я бы хотел что-то вроде

<ASSET_VALUE>
<VALUE_GREATER_THEN_0>/assets/asset > 0</VALUE_GREATER_THEN_0> 
<VALUE_LESS_THEN_0>/assets/asset < 0</VALUE_LESS_THEN_0> 
<OTHERWISE>1</OTHERWISE> 
</ASSET_VALUE> 
<ASSET_DESCRIPTION>string(/assets/asset/text())</ASSET_DESCRIPTION>

Любая помощь по этому вопросу очень ценится.

Спасибо, ребята

1 Ответ

1 голос
/ 01 ноября 2011

Вот пример, основанный на моем ответе здесь .

Вы не указали, что хотели сделать для table, поэтому я догадался.

Используя ваш XML-ввод (измененный, чтобы быть правильно сформированным):

<table name="ASSETS_TABLE" statement-type="INSERT"> 
  <column name="ASSET_ID">string(/assets/asset/value())</column> 
  <column name="ASSET_VALUE"> 
    <option name="VALUE_GREATER_THEN_0">/assets/asset > 0</option> 
    <option name="VALUE_LESS_THEN_0">/assets/asset &lt; 0</option> 
      <option name="OTHERWISE">1</option> 
  </column> 
  <column name="ASSET_DESCRIPTION">string(/assets/asset/text())</column> 
</table>

С помощью этой таблицы стилей XSLT 1.0:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="yes"/>
  <xsl:strip-space elements="*"/>

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

  <xsl:template match="table|column|option">
    <xsl:element name="{@name}">
      <!--
      Uncomment the following "xsl:copy-of" if you want to 
      retain any attributes other than "name":
      <xsl:copy-of select="@*[name() != 'name']"/>
      -->
      <xsl:apply-templates/>
    </xsl:element>
  </xsl:template>

</xsl:stylesheet>

Производит этот вывод:

<ASSETS_TABLE>
   <ASSET_ID>string(/assets/asset/value())</ASSET_ID>
   <ASSET_VALUE>
      <VALUE_GREATER_THEN_0>/assets/asset &gt; 0</VALUE_GREATER_THEN_0>
      <VALUE_LESS_THEN_0>/assets/asset &lt; 0</VALUE_LESS_THEN_0>
      <OTHERWISE>1</OTHERWISE>
   </ASSET_VALUE>
   <ASSET_DESCRIPTION>string(/assets/asset/text())</ASSET_DESCRIPTION>
</ASSETS_TABLE>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...