3

したがって、私が実行できるようにしたいのは、xsltprocを使用してXMLファイルをクエリし、サーバーのNAMEのパラメーターを渡すことです。この名前はXMLドキュメントに含まれています。このファイルからユーザー名とパスワードを取得したいと思います。

したがって、名前はユーザーとパスの兄弟です。私はXSLT、XPath、XQueryをそれほど頻繁に使用していません(これは19年ぶりに2回目です)。XMLファイルからスタイルシートからデータをプルする方法に迷いました。

これが私がCLIから渡しているものです(私はそれが正しいと思います):
xsltproc --stringparam site_name "'site2'" style.xsl source.xml

これがXMLです

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<Container>
    <Servers>
        <Folder expanded="1">
            <Server>
                <User>username1</User>
                <Pass>password1</Pass>
                <Name>Site1</Name>
            </Server>
            <Server>
                <User>username2</User>
                <Pass>password2</Pass>
                <Name>Site2</Name>
            </Server>
        </Folder>
        <Server>
            <User>username3</User>
            <Pass>password3</Pass>
            <Name>Site3</Name>
        </Server>
        <Server>
            <User>username4</User>
            <Pass>password4</Pass>
            <Name>Site4</Name>
        </Server>
    </Servers>
</Container>

これが私の現在のXSLTスタイルシートです

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:param name="site_name">Site1</xsl:param>
  <xsl:output method="text"/>
  <xsl:template match="//Servers">
    <xsl:value-of select="//Server/Name"/>
  </xsl:template>
</xsl:stylesheet>
4

2 に答える 2

1

さて、私はそれを理解しました。これが私がしたことです。最も効率的ではないかもしれませんが、うまくいくようです。

CLIの使用法はほとんど同じで、一重引用符を取り出しました。
xsltproc --stringparam site_name "site2" style.xsl source.xml

スタイルシート

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:param name="site_name">Site1</xsl:param>
  <xsl:output method="text"/>
  <xsl:template match="Servers">
    <xsl:for-each select="//Server">
      <xsl:if test="Name=$site_name">
        <xsl:value-of select="User"/>
        <xsl:value-of select="Pass"/>
      </xsl:if>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>
于 2013-03-18T03:44:51.130 に答える
0

select属性は、xsl:value-ofxsl:template一致したノードを基準にしたパスを使用する必要がありますxsl:template

しかし、本当に必要なのはに変更xsl:value-ofすることxsl:apply-templates select="Server[Name=$site_name]"です。次にxsl:template match="Server"、サーバーについて知りたいことをレポートするレポートを作成します。サーバーUserPass

この例を超えて、たとえば数千台のサーバーがあると予想される場合は、を使用することを検討しますxsl:key

于 2013-03-18T02:49:00.630 に答える