2012-12-07 85 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虽然答案! –