如何在元素中添加和显示属性?

时间:2015-07-16 20:15:55

标签: xml vb.net

目前我的功能只显示元素而不显示其属性。我不确定如何向元素添加属性。我可以在调试模式下查看所有元素,但需要具有属性的元素没有它们。 例如 我想看<Message MessageType="GetCodeListing" NodeID="1" ReferenceNumber="R-19293" UserID="8304" Source="IntegrationBroker">,但我只看到<Message/>,这意味着我需要将属性添加到此元素。 我该怎么做?

请注意,<Word ExactMatch='true'>07001G</Word> Word是一个变量,我不确定如何添加它。 我希望输出看起来像这样:

<Transaction ReferenceNumber="CC-Add-Appl-Doc-06292015_05" Source="IntegrationBroker" TransactionType="Multi">
    <DataPropagation>
        <IntraTxn xPath="/TxnResponse/Result[1]/Codes/Code/CodeID" ReplStr="#|CODEID|#"/>
    </DataPropagation>
    <Message MessageType="GetCodeListing" NodeID="1" ReferenceNumber="R-19293" UserID="8304" Source="IntegrationBroker">
        <CodeTypeID>JUS136</CodeTypeID>
        <Search>
            <Word ExactMatch='true'>07001G</Word>
        </Search>
    </Message>
    <Message MessageType="GetJudicialOfficerCode" NodeID="1" ReferenceNumber="R-19293" UserID="8304" Source="IntegrationBroker">
        <CodeID>#|CODEID|#</CodeID>
    </Message>
</Transaction>

我的函数创建一个新文档并在其中添加元素。我不确定如何向元素添加属性,这是我需要的帮助。

 Function GetJudgeAPI(ByVal astrJudgeId As String) As XmlDocument
    Dim objXmlOutPutDoc As XmlDocument
    Dim objXmlTransactionDoc As XmlDocument

    'Create Transaction message
    objXmlTransactionDoc = New XmlDocument
    objXmlTransactionDoc.AppendChild(objXmlTransactionDoc.CreateElement("Transaction"))
    objXmlTransactionDoc.DocumentElement.SetAttribute("ReferenceNumber", System.Guid.NewGuid.ToString)
    objXmlTransactionDoc.DocumentElement.SetAttribute("Source", "IntegrationBroker")
    objXmlTransactionDoc.DocumentElement.SetAttribute("TransactionType", "Get Judge")

    'Add Data Propagation
    objXmlTransactionDoc.SelectSingleNode("Transaction").AppendChild(objXmlTransactionDoc.CreateElement("DataPropagation"))
    objXmlTransactionDoc.SelectSingleNode("Transaction/DataPropagation").AppendChild(objXmlTransactionDoc.CreateElement("IntraTxn"))

    'Add Message
    objXmlTransactionDoc.SelectSingleNode("Transaction").AppendChild(objXmlTransactionDoc.CreateElement("Message"))
    objXmlTransactionDoc.SelectSingleNode("Transaction/Message[1]").AppendChild(objXmlTransactionDoc.CreateElement("CodeTypeID"))
    objXmlTransactionDoc.SelectSingleNode("Transaction/Message[1]/CodeTypeID").InnerText = "JUS136"
    objXmlTransactionDoc.SelectSingleNode("/Transaction/Message[1]").AppendChild(objXmlTransactionDoc.CreateElement("Search"))
    objXmlTransactionDoc.SelectSingleNode("Transaction/Message[1]/Search").AppendChild(objXmlTransactionDoc.CreateElement("Word"))
    'Message 2
    objXmlTransactionDoc.SelectSingleNode("Transaction").AppendChild(objXmlTransactionDoc.CreateElement("Message"))
    objXmlTransactionDoc.SelectSingleNode("Transaction/Message[2]").AppendChild(objXmlTransactionDoc.CreateElement("CodeID"))
    objXmlTransactionDoc.SelectSingleNode("Transaction/Message[2]/CodeID").InnerText = "#|CODEID|#"

End Function

1 个答案:

答案 0 :(得分:0)

如果您能够切换到System.Xml.Linq课程(LINQ to XML)和XML Literals

Dim word As String = "07001G"
Dim xml As XElement =
<Transaction ReferenceNumber=<%= Guid.NewGuid().ToString() %> Source="IntegrationBroker" TransactionType="Multi">
    <DataPropagation>
        <IntraTxn xPath="/TxnResponse/Result[1]/Codes/Code/CodeID" ReplStr="#|CODEID|#"/>
    </DataPropagation>
    <Message MessageType="GetCodeListing" NodeID="1" ReferenceNumber="R-19293" UserID="8304" Source="IntegrationBroker">
        <CodeTypeID>JUS136</CodeTypeID>
        <Search>
            <Word ExactMatch="true"><%= word %></Word>
        </Search>
    </Message>
    <Message MessageType="GetJudicialOfficerCode" NodeID="1" ReferenceNumber="R-19293" UserID="8304" Source="IntegrationBroker">
        <CodeID>#|CODEID|#</CodeID>
    </Message>
</Transaction>

正如您所看到的,您可以使用<%= ... %>语法在XML文字中嵌入表达式来执行变量替换,如上面针对ReferenceNumber属性值和Word使用的那样元素价值。它使得在VB.NET中处理XML变得更好(至少在我看来,我想其他人可能不喜欢在代码中嵌入XML!)。