簡體   English   中英

相同xml文件的多個屬性

[英]Multiple attributes of the same xml file

XQuery腳本需要顯示xml文件中的所有公司名稱和聯系人名稱。

這就是我所擁有的:

for $x in doc("Customers.xml")/dataroot/Customers return $x/CompanyName $x/ContactName

范例xml

<dataroot>
    <Customers>
        <CustomerID>ALFKI</CustomerID>
        <CompanyName>Alfreds Futterkiste</CompanyName>
        <ContactName>Maria Anders</ContactName>
        <ContactTitle>Sales Representative</ContactTitle>
        <Address>Obere Str. 57</Address>
        <City>Berlin</City>
        <PostalCode>12209</PostalCode>
        <Country>Germany</Country>
        <Phone>030-0074321</Phone>
        <Fax>030-0076545</Fax>
    </Customers>
    <Customers>
        <CustomerID>ANATR</CustomerID>
        <CompanyName>Ana Trujillo Emparedados y helados</CompanyName>
        <ContactName>Ana Trujillo</ContactName>
        <ContactTitle>Owner</ContactTitle>
        <Address>Avda. de la Constitución 2222</Address>
        <City>México D.F.</City>
        <PostalCode>05021</PostalCode>
        <Country>Mexico</Country>
        <Phone>(5) 555-4729</Phone>
        <Fax>(5) 555-3745</Fax>
    </Customers>
    <Customers>
        <CustomerID>ANTON</CustomerID>
        <CompanyName>Antonio Moreno Taquería</CompanyName>
        <ContactName>Antonio Moreno</ContactName>
        <ContactTitle>Owner</ContactTitle>
        <Address>Mataderos  2312</Address>
        <City>México D.F.</City>
        <PostalCode>05023</PostalCode>
        <Country>Mexico</Country>
        <Phone>(5) 555-3932</Phone>
    </Customers>
    <Customers>
        <CustomerID>AROUT</CustomerID>
        <CompanyName>Around the Horn</CompanyName>
        <ContactName>Thomas Hardy</ContactName>
        <ContactTitle>Sales Representative</ContactTitle>
        <Address>120 Hanover Sq.</Address>
        <City>London</City>
        <PostalCode>WA1 1DP</PostalCode>
        <Country>UK</Country>
        <Phone>(171) 555-7788</Phone>
        <Fax>(171) 555-6750</Fax>
    </Customers>
    <Customers>
        <CustomerID>BERGS</CustomerID>
        <CompanyName>Berglunds snabbköp</CompanyName>
        <ContactName>Christina Berglund</ContactName>
        <ContactTitle>Order Administrator</ContactTitle>
        <Address>Berguvsvägen  8</Address>
        <City>Luleå</City>
        <PostalCode>S-958 22</PostalCode>
        <Country>Sweden</Country>
        <Phone>0921-12 34 65</Phone>
        <Fax>0921-12 34 67</Fax>
    </Customers>

我只想返回CompanyName和ContactName。 這些必須能夠輕松轉換為表格格式,以便按列進行結構化

XQuery的基本數據模型是序列 ,而不是表或關系 這也適用於XQuery的result 因此,默認情況下,您將收到return子句返回的序列。 默認沒有返回的“列”或“表”。 如果您需要序列以外的其他或“更深層次的”返回結構,則必須自己添加。

獲得結構化結果的最簡單方法是創建XML輸出。 因此,大多數XQuery教程都以返回XML開頭,而不是純文本或其他任何東西。

如果需要“表結構”作為輸出,則有不同的選擇:

  • 輸出XML並將其導入另一個應用程序;
  • 用HTML表輸出(X)HTML;
  • 輸出CSV並使用您喜歡的電子表格軟件導入/解析。

要輸出XML,可以使用以下命令:

xquery version "1.0";
<table>
{
    for $cust in fn:doc("Customers.xml")/dataroot/Customers
    return
        <row>
        {
            $cust/CompanyName, $cust/ContactName
        }
        </row>
}
</table>

它將返回類似:

<table>
    <row>
        <CompanyName>Alfreds Futterkiste</CompanyName>
        <ContactName>Maria Anders</ContactName>
    </row>
    <row>
        <CompanyName>Ana Trujillo Emparedados y helados</CompanyName>
        <ContactName>Ana Trujillo</ContactName>
    </row>
    <row>
        <CompanyName>Antonio Moreno Taquería</CompanyName>
        <ContactName>Antonio Moreno</ContactName>
    </row>
    <row>
        <CompanyName>Around the Horn</CompanyName>
        <ContactName>Thomas Hardy</ContactName>
    </row>
    <row>
        <CompanyName>Berglunds snabbköp</CompanyName>
        <ContactName>Christina Berglund</ContactName>
    </row>
</table>

對於CSV輸出(更精確地說:一系列類似CSV的字符串),您可以使用

xquery version "1.0";
for $cust in fn:doc("Customers.xml")/dataroot/Customers
return
concat('"', $cust/CompanyName, '"', ',', '"', $cust/ContactName, '"')

得到像

"Alfreds Futterkiste","Maria Anders"
"Ana Trujillo Emparedados y helados","Ana Trujillo"
"Antonio Moreno Taquería","Antonio Moreno"
"Around the Horn","Thomas Hardy"
"Berglunds snabbköp","Christina Berglund"

編輯:一些XQuery處理器也提供內置的CSV序列化。 例如, Zorba XQuery處理器包括一個用於解析/序列化CSV模塊

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM