我需要更多幫助來遍歷 XML 文檔

喬納森·史密斯

我最近寫了一些代碼來使用 <xsl:for-each select="//dfor:children/dfor:child">

這段代碼運行良好,但我知道需要從指定的父元素遍歷相同的子元素,因為現在有多個子集 - 它們的父名稱為“otom_businessPartner”和“otom_expense”,因為迭代結果適用於兩個子集,而不是我需要的單套。

這是 XML:

<?xml version="1.0" encoding="UTF-8"?>
<dfor:form-data xmlns:dfor="http://kana.com/dforms">
    <dfor:field>
        <dfor:name>otom_businessPartner</dfor:name>
        <dfor:children>
            <dfor:child>
                <dfor:field>
                    <dfor:name>txt_bpName</dfor:name>
                    <dfor:value>Southampton City Council</dfor:value>
                </dfor:field>
                <dfor:field>
                    <dfor:name>txt_bpRelationship</dfor:name>
                    <dfor:value>Southampton City Council</dfor:value>
                </dfor:field>
                <dfor:field>
                    <dfor:name>txt_bpShare</dfor:name>
                    <dfor:value>Southampton City Council</dfor:value>
                </dfor:field>
            </dfor:child>
            <dfor:child>
                <dfor:field>
                    <dfor:name>txt_bpName</dfor:name>
                    <dfor:value>222222222</dfor:value>
                </dfor:field>
                <dfor:field>
                    <dfor:name>txt_bpRelationship</dfor:name>
                    <dfor:value>222222222</dfor:value>
                </dfor:field>
                <dfor:field>
                    <dfor:name>txt_bpShare</dfor:name>
                    <dfor:value>2222222222222222</dfor:value>
                </dfor:field>
            </dfor:child>
        </dfor:children>
    </dfor:field>

    <dfor:field>
        <dfor:name>otom_expenses</dfor:name>
        <dfor:children>
            <dfor:child>
                <dfor:field>
                    <dfor:name>sel_expense</dfor:name>
                    <dfor:value>Advertising</dfor:value>
                </dfor:field>
                <dfor:field>
                    <dfor:name>txt_other2</dfor:name>
                    <dfor:value/>
                </dfor:field>
                <dfor:field>
                    <dfor:name>num_actual</dfor:name>
                    <dfor:value>100</dfor:value>
                </dfor:field>
                <dfor:field>
                    <dfor:name>num_private</dfor:name>
                    <dfor:value>100</dfor:value>
                </dfor:field>
            </dfor:child>
            <dfor:child>
                <dfor:field>
                    <dfor:name>sel_expense</dfor:name>
                    <dfor:value>Leasing charges</dfor:value>
                </dfor:field>
                <dfor:field>
                    <dfor:name>txt_other2</dfor:name>
                    <dfor:value>car</dfor:value>
                </dfor:field>
                <dfor:field>
                    <dfor:name>num_actual</dfor:name>
                    <dfor:value>200</dfor:value>
                </dfor:field>
                <dfor:field>
                    <dfor:name>num_private</dfor:name>
                    <dfor:value>100</dfor:value>
                </dfor:field>
            </dfor:child>
        </dfor:children>
    </dfor:field>

</dfor:form-data>

這是 XLST:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:dfor="http://kana.com/dforms" exclude-result-prefixes="dfor">

    <xsl:param name="name" /> 
    <xsl:param name="ref" /> 
    
    <xsl:template match="/">
        <html>
            <body>
                
                        <p><strong>SECTION TITLE</strong></p>

                        <xsl:for-each select="//dfor:child">
                            
                            <h4>Business partner <xsl:value-of select="position()" />:</h4>
                            <ul>
                            <xsl:for-each select="dfor:field">

                                <!-- Business Partner's name -->
                                <xsl:if test="dfor:name='txt_bpName'">
                                    <li><strong>Business Partner's name: </strong> <xsl:value-of select="dfor:value"/></li>
                                </xsl:if>

                                <!-- Business Partner's relationship -->
                                <xsl:if test="dfor:name='txt_bpRelationship'">
                                    <li><strong>Business Partner's relationship: </strong> <xsl:value-of select="dfor:value"/></li>
                                </xsl:if>

                                <!-- Share of profits -->
                                <xsl:if test="dfor:name='txt_bpShare'">
                                    <li><strong>Share of profits: </strong> <xsl:value-of select="dfor:value"/></li>
                                </xsl:if>
                                
                            </xsl:for-each>
                            </ul>
        
                        </xsl:for-each>

            </body>
        </html> 
    </xsl:template>
</xsl:stylesheet>

它返回所有 4 個子項(2 個來自 otom_businessPartners,2 個來自 otom_expense)我需要找出正確的遍歷備份“otom_businessPartners”和“otom_expense”,以僅退出我想要的兩個。

這是需要工作的線路。' <xsl:for-each select="//dfor:child">'

它需要類似於 ' <xsl:for-each select="//children/dfor:child[name='otom_businessPartners']"> 這顯然是不正確的,因為我只想返回“otom_businessPartners”的孩子。

michael.hor257k

由於您沒有發布預期的結果,我在這裡主要是猜測。看來您想做類似的事情(簡化示例):

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:dfor="http://kana.com/dforms" 
exclude-result-prefixes="dfor">

<xsl:template match="/dfor:form-data">
    <html>
        <body>
            <xsl:for-each select="dfor:field[dfor:name='otom_businessPartner']/dfor:children/dfor:child">
                <h4>
                    <xsl:text>Business partner </xsl:text>
                    <xsl:value-of select="position()" />
                    <xsl:text>:</xsl:text>
                </h4>
                <ul>
                    <!-- Business Partner's name -->
                    <li>
                        <strong>Business Partner's name: </strong>
                        <xsl:value-of select="dfor:field[dfor:name='txt_bpName']/dfor:value"/>
                    </li>

                    <!-- more here -->
                    
                </ul>
            </xsl:for-each>

        </body>
    </html> 
</xsl:template>

</xsl:stylesheet>

應用於您的輸入示例,這將返回:

結果

<html>
   <body>
      <h4>Business partner 1:</h4>
      <ul>
         <li><strong>Business Partner's name: </strong>Southampton City Council
         </li>
      </ul>
      <h4>Business partner 2:</h4>
      <ul>
         <li><strong>Business Partner's name: </strong>222222222
         </li>
      </ul>
   </body>
</html>

渲染:

在此處輸入圖片說明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何通過比較其他兩個文檔的數組來查找文檔

我可以使用消息代理將 PDF 或 MS Word 文檔內容作為 XML 流式傳輸嗎?

我在 Android Studio 中收到“消息:XML 文檔結構必須在同一實體內開始和結束”

我有 R 代碼來從一個文檔中提取信息。如何為文件夾中的所有文檔循環播放?

在 C# 中按字母順序對 XML 文檔進行排序

如何遍歷 Firebase Firestore 文檔數組並將值推送到數組中

Firestore 快照 - 我們是否需要檢查返回的文檔 .exists 嗎?

如何根據對文檔本身中的值的操作來查詢 Firestore

來自 firebase 的文檔在一些數據後被剪切

如何使用 Golang 處理來自 MongoDB 文檔的數據?

在我的函數下添加文檔字符串似乎改變了我的結果

如何在未來的特定時間在我的 Flutter 應用程序中更新 Cloud Firestore 文檔

我可以在同一個網頁上有兩個不同的 DOM 文檔嗎?

我在哪裡可以找到 mac 終端命令的文檔,特別是“打開”

我如何使用 javascript 將 jquery 導入到文檔的頭部?

為什麼我不能為 Firebase 的文檔數據設置狀態?

為什麼 DocumentsContract.getTreeDocumentId(uri) 給我 Uri 參數的父文檔 ID?

為什麼我的 THREE.js 文檔框不起作用?

嘗試獲取文檔 A 中具有與文檔 B 共享的列值的數據框行的子集。有關更多詳細信息,請參見圖像

基本反應問題。為什麼在 React 文檔中的這個示例中需要 useEffect ?

C++ 標准文檔說程序不應調用主函數,但我做到了

我可以將同一個文檔發佈到 Firebase 中的 2 個不同集合嗎?

如何在我們的應用程序中獲取Docusign的簽名文檔鏈接的URL?

無法從嵌套的 xml 文檔中獲取數據並填充 xsl 樣式表以生成 html 網頁

我需要幫助

Flutter 谷歌分析文檔

Rust 更新 mongo 文檔

Powershell Word 文檔格式

遍歷列表循環錯誤幫助 - Yfinance