2

XML ドキュメントをロードする ASP.NET (VB) ユーザー コントロールがあります。このドキュメントは、2 つの可能なルート ノード名のいずれかを持つことができます。.NET を介して xml ファイルの先頭に追加する必要がある 3 つの xsl ファイルがあります。xsl 参照を追加することは問題ではありませんが、追加する xsl ファイルを決定する際に問題が発生しています。

XML ドキュメントをロードした後、最初に決定する必要があるのは、ルート ノードとは何かということです。どちらでもかまいません

<Document xmlns="urn:hl7-org:v3">
  <templateId root="usetemplate_1" />

また

<Document xmlns="urn:hl7-org:v3">
  <templateId root="usetemplate_2" />

また

<Record xmlns="urn:astm-org:REC">
  <objectId>useobjectid</objectId>

最初の 2 つの名前空間には 1 つの名前空間があり、3 つ目の名前空間には別の名前空間があることに注意してください (私の頭の中でそれを調整する方法もまだわかりません)。

これらの各オプションには、参照される異なる xsl ファイルがあります。私が言ったように、私は再利用できる別の場所に同様のコードを持っています。参照する正しいファイルを決定するだけの問題です。私はこれまでのところこれを持っています:

Dim m_xmld As XmlDocument
Dim m_nodelist As XmlNodeList
Dim m_node As XmlNode
m_xmld = New XmlDocument
m_xmld.Load(Me.XMLFileName)

Dim nsmgr As New XmlNamespaceManager(m_xmld.NameTable)
nsmgr.AddNamespace("x", "urn:hl7-org:v3")
m_nodelist = m_xmld.SelectNodes("x:Document/", nsmgr)

For Each m_node In m_nodelist
Next

上記のオプションからどれを選択するか、またはそれが必要であり、別の方法でより効率的に実行できるかどうかを判断するために、 for each/next 行の間に何を配置するかについて、私は途方に暮れています。

4

1 に答える 1

1

これはうまくいくはずです:

Dim m_xmld As New XmlDocument()
m_xmld.Load(Me.XMLFileName)
Dim nsmgr As New XmlNamespaceManager(m_xmld.NameTable)
nsmgr.AddNamespace("h", "urn:hl7-org:v3")
nsmgr.AddNamespace("a", "urn:astm-org:REC")
If m_xmld.SelectSingleNode("/h:Document/h:templateId[@root='usetemplate_1']", nsmgr) IsNot Nothing Then
    ' Use xsl A
ElseIf m_xmld.SelectSingleNode("/h:Document/h:templateId[@root='usetemplate_2']", nsmgr) IsNot Nothing Then
    ' Use xsl B
ElseIf m_xmld.SelectSingleNode("/a:Record/a:objectId", nsmgr) IsNot Nothing Then
    ' Use xsl C
End If

または、Select Caseより理にかなっている場合は、次のように属性の値を取得できます。

Dim root As XmlNode = doc.SelectSingleNode("/h:Document/h:templateId/@root", nsmgr)
If root IsNot Nothing Then
    Select Case root.InnerText
        Case "usetemplate_1"
            ' Use xsl A
        Case "usetemplate_2"
            ' Use xsl B
    End Select
ElseIf doc.SelectSingleNode("/a:Record/a:objectId", nsmgr) IsNot Nothing Then
    ' Use xsl C
End If

名前空間マネージャーには、必要な数の名前空間を追加できます。名前空間が実際には XML ドキュメントのどこにも使用されていなくても、問題にはなりません。したがって、ご覧のとおり、両方の潜在的な名前空間を同時に追加できます。

于 2013-09-30T17:27:20.707 に答える