Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
visualbasic使用XmlDocument解析Xml文件_Xml_Vba_Xmldocument - Fatal编程技术网

visualbasic使用XmlDocument解析Xml文件

visualbasic使用XmlDocument解析Xml文件,xml,vba,xmldocument,Xml,Vba,Xmldocument,我有一个包含以下代码的xml文件: <?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> <pr

我有一个包含以下代码的xml文件:

<?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>
我使用此代码获取ProjectName、PackageName和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
谢谢:)好的,我找到了答案:)


正如在注释中所讨论的,下面是可以使用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

你试过什么吗?所需值的XPath非常基本,您应该能够对其进行编码。@PankajJaju我编辑了我的问题:)如果您使用XPath获得所需的值,会容易得多。这将清理您的代码,如果您将xpath放在一个数组中并使用循环遍历数组(可伸缩代码)@PankajJaju我不知道如何使用它:(嗨,Milad,我已经发布了使用xpath获取值的示例代码
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
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