XSL: выбрать значение элемента с помощью селектора XPath - PullRequest
1 голос
/ 30 августа 2011

У меня следующая XML-схема, и я хочу выбрать Table>Row>Field with name = Amount

<?xml version="1.0" encoding="utf-8"?>
<Document>
  <PermitDocument code="01312" id="1">
    <Field name="DocumentType">Certificate</Field>
    ...
    ...
    <Table name="Products">
      <Row>
        <Field name="Amount">1000</Field>
        ...
        ...
      </Row>
      <Row>
        <Field name="Amount">3000</Field>
        ...
        ...
      </Row>
    </Table>
  </PermitDocument>
</Document>

У меня есть следующий код для преобразования, но ничего не происходит

<xsl:for-each select="Document/PermitDocument/Table[@name='Products']/Row">
    <xsl:value-of select="Field[@name='Amount']" />
    ...
    ...
</xsl:for-each>

C # код

XslTransform xs = new XslTransform();

try
{
  xs.Load("BCIS.xsl");
}
catch (XsltException e)
{
  Console.WriteLine(e.StackTrace);
  Console.ReadLine();
}

xs.Transform("BCIS.xml", "BCIS.html");

Что не так с синтаксисом, который я использовал для достижения цели?

Султан

1 Ответ

1 голос
/ 30 августа 2011

Введите:

<Document>
    <PermitDocument code="01312" id="1">
        <Field name="DocumentType">Certificate</Field>
        <Table name="Products">
            <Row>
                <Field name="Amount">1000</Field>
            </Row>
            <Row>
                <Field name="Amount">3000</Field>
            </Row>
        </Table>
    </PermitDocument>
</Document>

XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="/">
        <xsl:for-each select="Document/PermitDocument/Table[@name='Products']/Row">
            <xsl:value-of select="Field[@name='Amount']" />
        </xsl:for-each>
    </xsl:template>

</xsl:stylesheet>

Выход:

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