【问题标题】:parsing a XML string from a Tag in VBscript从 VBscript 中的标记解析 XML 字符串
【发布时间】:2014-02-26 18:58:59
【问题描述】:

我在从 XML 中解析字符串时遇到了一些麻烦。这是我拥有的标签的示例:

<author>   {"picture":"http:\/\/images.ak.instagram.com\/profiles\/profile_315469453_75sq_1381947801.jpg","name":"Natural Places And Views","username":"alhamadikh","link":"http:\/\/instagram.com\/alhamadikh"}
</author>

我已经能够从我拥有的 XML 中正确解析所有单独的标签(如下所示:标题/图像/链接),除了里面的“图片”、“名称”和“用户名”作者标签的。我需要编写什么代码来单独提取作者标签内的信息?

下面是我需要提取标题时的一行代码示例:

FindComponent("MainText"&i).text = x.selectsinglenode("title").text

这是我试图提取作者内部的图片(不成功):

FindComponent("AvatarImage"&i).text = x.selectsinglenode("author/picture").text

任何帮助或建议将不胜感激,我已经搜索了几个小时,似乎无法找到正确的答案。我也使用 VBscript 作为提取信息的语言。

谢谢!

【问题讨论】:

  • 这是 XML 节点内的 JSON。似乎不太容易在 vbscript 中处理它(成熟) - see here
  • 啊哈!谢谢你解释。我会尝试看看开发者是否可以进一步将“作者”XMLnode的JSON部分分成他们自己的节点。

标签: xml string parsing vbscript


【解决方案1】:

正如@KekuSemau 所指出的,&lt;author&gt; 标记内的文本是 JSON,而不是 XML,因此您不能使用 XPath 来选择图像 URL。不过,如果您只想从 JSON 对象中提取一个 URL,则不一定需要成熟的 JSON 解析器。只要需求不变得更复杂,一个正则表达式就足够了。

Set re = New RegExp
re.Pattern = """picture"":""(.*?)"""

For Each m In re.Execute(x.SelectSingleNode("author").text)
  WScript.Echo m.Submatches(0)
Next

【讨论】:

  • 感谢您抽出宝贵时间回答我的问题!
【解决方案2】:

autor 节点的 .text 就是:文本。您不能使用 XML 进一步解析它。您可以使用 RegExp 剪切/拆分带引号的键值对:

选项显式

Dim sAT : sAT =   "    {""picture"":""http:\/\/images.ak.instagram.com\/profiles\/profile_315469453_75sq_1381947801.jpg"",""name"":""Natural Places And Views"",""username"":""alhamadikh"",""link"":""http:\/\/instagram.com\/alhamadikh""}"
Dim reX : Set reX = New RegExp
reX.Global  = True
reX.Pattern = """([^""]+)"":""([^""]+)"""
Dim oMTS : Set oMTS = reX.Execute(sAT)
Dim oMT
For Each oMT In oMTS
    WScript.Echo oMT.SubMatches(0)
    WScript.Echo " ", oMT.SubMatches(1)
Next

输出:

cscript 22050687.vbs
picture
  http:\/\/images.ak.instagram.com\/profiles\/profile_315469453_75sq_1381947801.jpg
name
  Natural Places And Views
username
  alhamadikh
link
  http:\/\/instagram.com\/alhamadikh

为了进一步处理,最好将键值对放入字典中。

【讨论】:

    猜你喜欢
    • 2016-01-19
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    相关资源
    最近更新 更多