标签: xnamespace

使用xsi:schemaLocation命名空间创建XDocument

我需要创建以下XML,我正在尝试使用XDocument.但是,我在指定名称空间时遇到了麻烦.

<AssessmentOrderRequest
    xsi:schemaLocation="http://ns.hr-xml.org/2007-04-15 http://ns.hr-xml.org/2_5/HR-XML-2_5/StandAlone/AssessmentOrderRequest.xsd"
    xmlns="http://ns.hr-xml.org/2007-04-15"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
</AssessmentOrderRequest>
Run Code Online (Sandbox Code Playgroud)

这是我正在寻找的那种代码,但是,我无法在名称中创建带冒号的属性xsi:schemaLocation.

return new XDocument(
    new XElement("AssessmentOrderRequest",
        new XAttribute("xsi:schemaLocation", XNamespace.Get("http://ns.hr-xml.org/2007-04-15 http://ns.hr-xml.org/2_5/HR-XML-2_5/StandAlone/AssessmentOrderRequest.xsd")),
        new XAttribute("xmlns", XNamespace.Get("http://ns.hr-xml.org/2007-04-15")),
        new XAttribute(XNamespace.Xmlns + "xsi", XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance"))
    )
);
Run Code Online (Sandbox Code Playgroud)

c# xml linq-to-xml xnamespace

18
推荐指数
1
解决办法
2万
查看次数

解析XDocument而不必继续指定默认命名空间

我有一些XML数据(类似于下面的示例),我想读取代码中的值.

为什么我被迫指定默认名称空间来访问每个元素?我原本期望默认命名空间用于所有元素.

有没有更合理的方法来实现我的目标?

示例XML:

<?xml version="1.0" encoding="UTF-8"?>
<ReceiptsBatch xmlns="http://www.secretsonline.gov.uk/secrets">
    <MessageHeader>
        <MessageID>00000173</MessageID>
        <Timestamp>2009-10-28T16:50:01</Timestamp>
        <MessageCheck>BX4f+RmNCVCsT5g</MessageCheck>
    </MessageHeader>
    <Receipts>
        <Receipt>
            <Status>OK</Status>
        </Receipt>
    </Receipts>
</ReceiptsBatch>
Run Code Online (Sandbox Code Playgroud)

用于读取我之后的xml元素的代码:

XDocument xDoc = XDocument.Load( FileInPath );

XNamespace ns = "http://www.secretsonline.gov.uk/secrets";

XElement MessageCheck = xDoc.Element(ns+ "MessageHeader").Element(ns+"MessageCheck");
XElement MessageBody = xDoc.Element("Receipts");
Run Code Online (Sandbox Code Playgroud)

c# xml linq-to-xml xnamespace

12
推荐指数
3
解决办法
6172
查看次数

XDocument.Validate名称空间问题

我修改了MSDN示例以反映我的问题.

当使用命名空间时,我无法像我期望的那样使文档得到验证,并且在验证没有命名空间的文档时,无论其是否有错误,它都会进行验证.

Dim errors As Boolean = False

Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs)
    Console.WriteLine("{0}", e.Message)
    errors = True
End Sub

Private Function AddNameSpace(ByVal xDoc As XDocument, ByVal ns As XNamespace) As XDocument
    For Each element As XElement In xDoc.Descendants
        element.Name = ns + element.Name.LocalName
    Next
    Return xDoc
End Function

Sub Main()
    Dim xsdMarkup As XElement = _
        <xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns="http://somenamespace.com" targetNamespace="http://somenamespace.com">
            <xsd:element name='Root'>
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name='Child1' minOccurs='1' maxOccurs='1'/>
                        <xsd:element name='Child2' minOccurs='1' maxOccurs='1'/> …
Run Code Online (Sandbox Code Playgroud)

.net vb.net linq-to-xml xnamespace

3
推荐指数
1
解决办法
1968
查看次数

标签 统计

linq-to-xml ×3

xnamespace ×3

c# ×2

xml ×2

.net ×1

vb.net ×1