Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
XSD dosyası, yeni öğe türleri oluşturmak üzere öğelerin birleştirilebilmesi için XML dosyasında ilişkiler kurabilir. Bu makalede, öğeleri birleştiren ve yeni bir XML belgesi oluşturan C# ve Visual Basic için bir örnek sağlanır.
XML belgesindeki bir öğe veya öznitelik bazen başka bir öğeye veya özniteliğe başvurabilir. Örneğin, XML belgesi Örnek XML dosyası: Müşteriler ve siparişler bir müşteri listesi ve bir sipariş listesi içerir. Her Customer öğenin bir CustomerID özniteliği vardır ve her Order öğe bir CustomerID öğe içerir. CustomerID Bir Order öğedeki öğe değeri, eşleşen CustomerID öznitelik değerine sahip öğeye Customer başvurur.
Örnek XSD dosyası: Müşteriler ve siparişler makalesi, belgeyi Customers and orders doğrulamak için kullanılabilecek bir XSD içerir. öğesinin xs:key özniteliğinin Customer bir anahtar olduğunu CustomerID ve anahtar ile öğelerin öğesi arasında bir ilişki kurmak için XSD'nin Orderve xs:keyrefCustomerID özelliklerini kullanır.
LINQ to XML ile, sipariş bilgileri için müşteri bilgilerini birleştirmek üzere yan tümcesini join kullanarak bu ilişkiden yararlanabilirsiniz.
hakkında joindaha ayrıntılı bilgi için bkz . Birleştirme İşlemleri (C#) ve Birleştirme İşlemleri (Visual Basic).
Not
Birleştirmeler doğrusal aramalar kullanılarak yapılır. Arama performansını artıracak dizin yok.
Örnek: ve Order öğelerinin Customer katıldığı yeni bir XML belgesi oluşturma
Aşağıdaki örnek, Örnek XML dosyasının öğelerini birleştiren Customer yeni bir XML belgesi oluşturur: Müşteriler ve siparişler öğelere Order eklenir ve öğesini siparişlere eklerCompanyName.
Sorguyu yürütmeden önce örnek, belgenin Örnek XSD dosyasındaki şemayla uyumlu olduğunu doğrular: Müşteriler ve siparişler. Bu, join yan tümcesinin çalışmasını sağlar.
Sorgu yalnızca "K" değerinden büyük müşteriler CustomerID için siparişleri seçer. Her sipariş içindeki müşteri bilgilerini içeren yeni Order öğeleri projeler.
XmlSchemaSet schemas = new XmlSchemaSet();
schemas.Add("", "CustomersOrders.xsd");
Console.Write("Attempting to validate, ");
XDocument custOrdDoc = XDocument.Load("CustomersOrders.xml");
bool errors = false;
custOrdDoc.Validate(schemas, (o, e) =>
{
Console.WriteLine("{0}", e.Message);
errors = true;
});
Console.WriteLine("custOrdDoc {0}", errors ? "did not validate" : "validated");
if (!errors)
{
// Join customers and orders, and create a new XML document with
// a different shape.
// The new document contains orders only for customers with a
// CustomerID > 'K'
XElement custOrd = custOrdDoc.Element("Root");
XElement newCustOrd = new XElement("Root",
from c in custOrd.Element("Customers").Elements("Customer")
join o in custOrd.Element("Orders").Elements("Order")
on (string)c.Attribute("CustomerID") equals
(string)o.Element("CustomerID")
where ((string)c.Attribute("CustomerID")).CompareTo("K") > 0
select new XElement("Order",
new XElement("CustomerID", (string)c.Attribute("CustomerID")),
new XElement("CompanyName", (string)c.Element("CompanyName")),
new XElement("ContactName", (string)c.Element("ContactName")),
new XElement("EmployeeID", (string)o.Element("EmployeeID")),
new XElement("OrderDate", (DateTime)o.Element("OrderDate"))
)
);
Console.WriteLine(newCustOrd);
}
Public Class Program
Public Shared errors As Boolean = False
Public Shared Function LamValidEvent(ByVal o As Object, _
ByVal e As ValidationEventArgs) As Boolean
Console.WriteLine("{0}", e.Message)
errors = True
End Function
Shared Sub Main()
Dim schemas As New XmlSchemaSet()
schemas.Add("", "CustomersOrders.xsd")
Console.Write("Attempting to validate, ")
Dim custOrdDoc As XDocument = XDocument.Load("CustomersOrders.xml")
custOrdDoc.Validate(schemas, Function(o, e) LamValidEvent(0, e))
If errors Then
Console.WriteLine("custOrdDoc did not validate")
Else
Console.WriteLine("custOrdDoc validated")
End If
If Not errors Then
'Join customers and orders, and create a new XML document with
' a different shape.
'The new document contains orders only for customers with a
' CustomerID > 'K'.
Dim custOrd As XElement = custOrdDoc.<Root>.FirstOrDefault
Dim newCustOrd As XElement = _
<Root>
<%= From c In custOrd.<Customers>.<Customer> _
Join o In custOrd.<Orders>.<Order> _
On c.@CustomerID Equals o.<CustomerID>.Value _
Where c.@CustomerID.CompareTo("K") > 0 _
Select _
<Order>
<CustomerID><%= c.@CustomerID %></CustomerID>
<%= c.<CompanyName> %>
<%= c.<ContactName> %>
<%= o.<EmployeeID> %>
<%= o.<OrderDate> %>
</Order> _
%>
</Root>
Console.WriteLine(newCustOrd)
End If
End Sub
End Class
Bu örnek aşağıdaki çıkışı oluşturur:
Attempting to validate, custOrdDoc validated
<Root>
<Order>
<CustomerID>LAZYK</CustomerID>
<CompanyName>Lazy K Kountry Store</CompanyName>
<ContactName>John Steel</ContactName>
<EmployeeID>1</EmployeeID>
<OrderDate>1997-03-21T00:00:00</OrderDate>
</Order>
<Order>
<CustomerID>LAZYK</CustomerID>
<CompanyName>Lazy K Kountry Store</CompanyName>
<ContactName>John Steel</ContactName>
<EmployeeID>8</EmployeeID>
<OrderDate>1997-05-22T00:00:00</OrderDate>
</Order>
<Order>
<CustomerID>LETSS</CustomerID>
<CompanyName>Let's Stop N Shop</CompanyName>
<ContactName>Jaime Yorres</ContactName>
<EmployeeID>1</EmployeeID>
<OrderDate>1997-06-25T00:00:00</OrderDate>
</Order>
<Order>
<CustomerID>LETSS</CustomerID>
<CompanyName>Let's Stop N Shop</CompanyName>
<ContactName>Jaime Yorres</ContactName>
<EmployeeID>8</EmployeeID>
<OrderDate>1997-10-27T00:00:00</OrderDate>
</Order>
<Order>
<CustomerID>LETSS</CustomerID>
<CompanyName>Let's Stop N Shop</CompanyName>
<ContactName>Jaime Yorres</ContactName>
<EmployeeID>6</EmployeeID>
<OrderDate>1997-11-10T00:00:00</OrderDate>
</Order>
<Order>
<CustomerID>LETSS</CustomerID>
<CompanyName>Let's Stop N Shop</CompanyName>
<ContactName>Jaime Yorres</ContactName>
<EmployeeID>4</EmployeeID>
<OrderDate>1998-02-12T00:00:00</OrderDate>
</Order>
</Root>