Как получить данные из документа XML с использованием XSLT для использования в сетке данных ASP.NET? - PullRequest
0 голосов
/ 27 октября 2009

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

<?xml version="1.0" encoding="UTF-8" ?>
<DOCUMENTS>
<DOCUMENTS_INFO DOCUMENT_COUNT="8" />
  <DOCUMENT_GROUP NAME="Invoices" DISPLAY_NAME="INVOICES">
    <DOCUMENT>
      <FIELD>
<name>USER</name>
        <display_name>Deposited by</display_name>
        <value>machine</value>
      </FIELD>
      <FIELD>
        <name>DATE</name>
        <display_name>Archive date</display_name>
        <value>21/05/2009</value>
      </FIELD>
    </DOCUMENT>
    <DOCUMENT>
      <FIELD>
        <name>USER</name>
        <display_name>Deposited by</display_name>
        <value>machine</value>
      </FIELD>
      <FIELD>
        <name>DATE</name>
        <display_name>Archive date</display_name>
        <value>21/06/2009</value>
      </FIELD>
    </DOCUMENT>
  </DOCUMENT_GROUP>
</DOCUMENTS>

Мне нужно конвертировать, чтобы я мог прочитать его в моей таблице данных в ASP.NET, чтобы на выходе было что-то вроде этого:

Deposited by | Archive date
     machine | 21/05/2009
     machine | 21/06/2009

Большое спасибо

1 Ответ

1 голос
/ 27 октября 2009

Тебе вообще не нужно ничего конвертировать. Если вы хотите перетащить данные в набор данных или что-то еще, чтобы вы могли их отобразить, все, что вам нужно, это немного XPath.

XPath для получения всех DOCUMENT элементов:

//DOCUMENT

И XPath для получения пары value элементов на основе значения name на основе DOCUMENT элемента:

FIELD[name = 'USER']/value
FIELD[name = 'DATE']/value

Таким образом, в зависимости от технологии, которую вы используете для синтаксического анализа XML, вам, в основном, потребуется цикл над первым выражением, а затем выполнить следующие два выражения по результатам первого цикла. В XSL это будет выглядеть примерно так:

<xsl:template match="/">
  <xsl:for-each select="//DOCUMENT">
    <xsl:value-of select="FIELD[name = 'USER']/value"/>
    <xsl:text>|</xsl:text>
    <xsl:value-of select="FIELD[name = 'DATE']/value"/>
  </xsl:for-each>
</xsl:template>

Как и все, есть несколько способов сделать это. Вы также можете использовать шаблон:

<xsl:template match="/">
  <xsl:apply-templates select="//DOCUMENT" />
</xsl:template>
<xsl:template match="DOCUMENT">
  <xsl:value-of select="FIELD[name = 'USER']/value"/>
  <xsl:text>|</xsl:text>
  <xsl:value-of select="FIELD[name = 'DATE']/value"/>
</xsl:template>

Оба из них дадут вывод, который вы дали в качестве примера, но вам, вероятно, лучше прочитать значения XPath непосредственно в набор данных или написать собственный адаптер для извлечения этих значений и загрузки их непосредственно в таблицу данных. 1019 *

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