0

我正在制作一个创建批处理渲染脚本的小型应用程序,它一切顺利并且完成了它应该做的所有事情,但我遇到了障碍批处理工具将加密的场景文件转换为只有相机名称的 XML 文件,所以我要做的是从名为 temp.xml 的文件中检索相机名称。在 XML 中,它看起来像这样:

<Object Identifier="./Cameras/## Current View ##" Label="Standard Camera" Name="## Current View ##" Type="Camera">

我需要获取## Current View ## 和任何其他相机并将它们添加到列表框中

我希望在这个过程中这不是含糊的用户输入场景名称,保存路径他们可以手动输入相机名称或按下按钮,通过命令行启动渲染软件加载带有参数的场景(条出所有模型,灯光纹理信息等)并保存一个带有一些渲染选项和相机信息的小xml ..这有点工作,但我已经把我的大脑炸了哈哈

如果相机介于两者之间,<> </>我知道该怎么做,我想我只是把事情复杂化了,所以我问:)

4

2 回答 2

0

XPath 表达式//Object/@Name将返回所有相机名称。

于 2013-07-06T08:57:00.027 回答
0

如果你必须处理一个 XML 文件,你能做的最好的事情就是依赖 XMLReader 类。在这里,您有一个如何将其与您的信息一起使用的示例:

    Dim path As String = "path of the XML file"
    Dim settings As System.Xml.XmlReaderSettings = New System.Xml.XmlReaderSettings()
    settings.ConformanceLevel = System.Xml.ConformanceLevel.Fragment
    Using reader As System.Xml.XmlReader = System.Xml.XmlReader.Create(path)
        While (reader.Read())
            if (reader.NodeType = System.Xml.XmlNodeType.Element) Then
                If (reader.Name = "Object") Then

                    Dim wholeAttribute As String 'Whole string as contained in the XML attribute
                    Dim betweenHashes As String 'String between #'s


                    'From "Identifier"
                    wholeAttribute = reader.GetAttribute("Identifier")
                    If (wholeAttribute IsNot Nothing And wholeAttribute.Trim.Length > 0) Then
                        If (wholeAttribute.Contains("#")) Then
                            betweenHashes = wholeAttribute.Substring(wholeAttribute.IndexOf("#"), wholeAttribute.LastIndexOf("#") - wholeAttribute.IndexOf("#") + 1)
                            betweenHashes = betweenHashes.Replace("#", "").Trim()
                        Else
                            betweenHashes = wholeAttribute
                        End If
                    End If

                    'From "Name"
                    wholeAttribute = reader.GetAttribute("Name")
                    If (wholeAttribute IsNot Nothing And wholeAttribute.Trim.Length > 0) Then
                        If (wholeAttribute.Contains("#")) Then
                            betweenHashes = wholeAttribute.Replace("#", "").Trim()
                        Else
                            betweenHashes = wholeAttribute
                        End If
                    End If


                    'Adding the string to ListBox1
                    If (betweenHashes IsNot Nothing And betweenHashes.Trim.Length > 0) Then
                        ListBox1.Items.Add(betweenHashes)
                    End If


                End If
            End If
        End While
   End Using

如您所见,上面的代码从两个不同的地方检索您想要的内容。我想这些信息足以帮助您了解如何处理 VB.NET 中的 XML 解析。

于 2013-07-06T09:02:12.047 回答