2012-12-07 114 views
1

我是xml,xquery和xpath的初學者。根據它們之間的定義關係,可以將兩個單獨的xml文檔鏈接在一起嗎?例如,如果我有一個包含在線零售系統的所有客戶,像這樣(縮短例子)的XML文檔:鏈接xml文檔

<customers> 
<customer loyaltyPoints = "20" sex = "male"> 
    <customerID>1092</customerID> 
    <first_name>James</first_name> 
    <second_name>Roland</second_name> 
    <email_address>[email protected]</email_address> 
    <DOB> 
     <day>07</day> 
     <month>05</month> 
     <year>1970</year>  
    </DOB> 
    <orderlist> 
     <order>[LINK TO ORDER FROM ORDERS.XML]</order> 
    </orderlist> 
</customer> 

,幷包含一系列像這樣的訂單的第二個XML文件:

<orders> 
<order numberOfItems = "2"> 
    <orderID>384523</orderID> 
    <items> 
     <item>[LINK TO PRODUCT X IN PRODUCTS.XML]</item> 
     <item>[LINK TO PRODUCT Y IN PRODUCTS.XML]</item> 
    </items> 
</order> 
</orders> 

我可以將客戶鏈接到其他文檔中的訂單,反之亦然?非常感謝

+0

你想把這些組合成一個xml文檔嗎? – Viktor

+0

沒有他們需要留在單獨的XML文件,但我想顯示他們如何相互鏈接和引用彼此 –

回答

2

如果你使用你有ID's作爲鏈接,你可以做以下鍵:

XmlDocument customerDoc = new XmlDocument(); 
customerDoc.LoadXml("<customers> 
         <customer loyaltyPoints = \"20\" sex = \"male\"> 
         <customerID>1092</customerID> 
         <first_name>James</first_name> 
         <second_name>Roland</second_name> 
         <email_address>[email protected]</email_address> 
         <DOB> 
          <day>07</day> 
          <month>05</month> 
          <year>1970</year> 
         </DOB> 
         <orderlist> 
          <order>384523</order> 
         </orderlist> 
         </customer> 
        </customers>"); 

XmlDocument ordersDoc = new XmlDocument(); 
ordersDoc.LoadXml("<orders> 
         <order numberOfItems = \"2\"> 
          <orderID>384523</orderID> 
          <items> 
           <item>[LINK TO PRODUCT X IN PRODUCTS.XML]</item> 
           <item>[LINK TO PRODUCT Y IN PRODUCTS.XML]</item> 
          </items> 
         </order> 
        </orders>"); 

// Select all "customer" nodes 
XmlNodeList nodes = customerDoc.SelectNodes("customers/customer"); 

foreach (XmlNode node in nodes) 
{ 
    XmlNodeList orderList = node.SelectNodes("orderlist"); 
    foreach (XmlNode orderNode in orderList) 
    { 
      string orderId = orderNode.InnerText; 
      XmlNode orderInOrderDocNode = ordersDoc.SelectSingleNode("orders/order[orderID='" + orderId + "']"); 
      Console.WriteLine(orderInOrderDocNode.InnerText); 
      } 
     } 

這將打印出被賦予的orders.xml中文檔中出現的順序節點orderId在客戶文檔中。

希望這是你正在尋找。

+0

感謝您的答案,但那不是我想做的。我不確定它甚至有可能,因爲網上關於它的信息很少。 +1雖然答案! –

+0

感謝您的回答,但那不是我想要做的。我不確定它甚至有可能,因爲網上關於它的信息很少。 +1雖然答案! –