2017-08-11 49 views
0

我有这个代码的XML文件:Visual Basic中解析XML文件中使用XmlDocument的

<?xml version='1.0' encoding='utf-8'?> 
<widget id="PACKAGE_NAME" version="PROJECT_VERSION" xmlns="http://www.w3.org/ns/widgets" xmlns:gap="http://phonegap.com/ns/1.0"> 
    <name>PROJECT_NAME</name> 
    <preference name="android-minSdkVersion" value="MIN_SDK" /> 
    <preference name="android-versionCode" value="VERSION_CODE" /> 
    <preference name="android-installLocation" value="INSTALL" /> 
    <preference name="android-targetSdkVersion" value="TARGET_SDK" /> 
    <preference name="orientation" value="ORIENTATION" /> 
    <preference name="fullscreen" value="FULLSCREEN" /> 
</widget> 

,我有这个变量:

Dim PackageName, ProjectName, ProjectVersion, VersionCode, MinSdk, TargetSdk, InstallLocation, Orientation, FullScreen As String 

我使用此代码来获得项目名,包名和ProjectVersion:

Dim doc as XmlDocument = new XmlDocument() 
doc.Load("config.xml") 
Dim root As XmlElement = doc.DocumentElement 
PackageName = root.GetAttribute("id") 
ProjectVersion = root.GetAttribute("version") 
ProjectName = root.GetElementsByTagName("name").Item(0).InnerText 

但我不能得到这个值:

VersionCode = VERSION_CODE 
MinSdk = MIN_SDK 
TargetSdk = TARGET_SDK 
FullScreen = FULLSCREEN 
Orientation = ORIENTATION 

谢谢:)

+0

你尝试过什么吗?所需值的xpath是非常基本的,你应该能够对它们进行编码。 –

+0

@PankajJaju我编辑了我的问题:) –

回答

0

好吧,我找到答案:)

Dim doc As XmlDocument = New XmlDocument() 
doc.Load("config.xml") 
Dim root As XmlElement = doc.DocumentElement 
PackageName = root.GetAttribute("id") 
ProjectVersion = root.GetAttribute("version") 
ProjectName = doc.GetElementsByTagName("name").Item(0).InnerText 
For i = 0 To doc.GetElementsByTagName("preference").Count - 1 
    If (doc.GetElementsByTagName("preference").Item(i).Attributes.Item(0).Value.Contains("fullscreen")) Then 
     FullScreen = doc.GetElementsByTagName("preference").Item(i).Attributes.Item(1).Value 
    ElseIf (doc.GetElementsByTagName("preference").Item(i).Attributes.Item(0).Value.Contains("orientation")) Then 
     Orientation = doc.GetElementsByTagName("preference").Item(i).Attributes.Item(1).Value 
    ElseIf (doc.GetElementsByTagName("preference").Item(i).Attributes.Item(0).Value.Contains("android-minSdkVersion")) Then 
     MinSdk = doc.GetElementsByTagName("preference").Item(i).Attributes.Item(1).Value 
    ElseIf (doc.GetElementsByTagName("preference").Item(i).Attributes.Item(0).Value.Contains("android-targetSdkVersion")) Then 
     TargetSdk = doc.GetElementsByTagName("preference").Item(i).Attributes.Item(1).Value 
    ElseIf (doc.GetElementsByTagName("preference").Item(i).Attributes.Item(0).Value.Contains("android-installLocation")) Then 
     InstallLocation = doc.GetElementsByTagName("preference").Item(i).Attributes.Item(1).Value 
    ElseIf (doc.GetElementsByTagName("preference").Item(i).Attributes.Item(0).Value.Contains("android-versionCode")) Then 
     VersionCode = doc.GetElementsByTagName("preference").Item(i).Attributes.Item(1).Value 
    End If 
Next 
+1

如果您使用xpaths来获取所需的值,将会容易得多。这将清理你的代码,如果你把xpaths放在一个数组中并且使用一个循环来遍历数组(可伸缩代码),它将更容易维护。 –

+0

@PankajJaju我不知道如何使用它:( –

+1

Hi Milad,I已经发布了使用xpath获取值的示例代码 –

1

正如在评论中讨论,这里是示例代码,您可以使用使用XPath

得到的值
Sub test() 
    Dim objXML, arrNodes, nodesXML, i 

    Set objXML = CreateObject("MSXML2.DOMDocument.6.0") 
    With objXML 
     .SetProperty "SelectionLanguage", "XPath" 
     .SetProperty "SelectionNamespaces", "xmlns:s='http://www.w3.org/ns/widgets'" 
     .ValidateOnParse = True 
     .Async = False 
     .Load "C:\Users\pankaj.jaju\Desktop\test.xml" 
    End With 

    arrNodes = Array("/s:widget/s:preference[@name='android-minSdkVersion']/@value", _ 
        "/s:widget/s:preference[@name='android-versionCode']/@value", _ 
        "/s:widget/s:preference[@name='android-installLocation']/@value", _ 
        "/s:widget/s:preference[@name='android-targetSdkVersion']/@value", _ 
        "/s:widget/s:preference[@name='orientation']/@value", _ 
        "/s:widget/s:preference[@name='fullscreen']/@value", _ 
        "/s:widget/@id", _ 
        "/s:widget/@version", _ 
        "/s:widget/s:name") 

    For i = LBound(arrNodes) To UBound(arrNodes) 
     Set nodesXML = objXML.DocumentElement.SelectSingleNode(arrNodes(i)) 
     MsgBox nodesXML.Text 
    Next 

    Set nodesXML = Nothing: Set objXML = Nothing 
End Sub