0

我有一个字符串,它看起来像一个 XML 文件,但实际上它只是一个保存在变量中的普通字符串。

字符串是这样的:

<m:properties>
             <d:user_id m:type="Edm.Int64">37</d:user_id>
             <d:organization_id m:type="Edm.Int64">1</d:organization_id>
             <d:name>Test</d:name>
             <d:password>81dc9bdb52d04dc20036dbd8313ed055</d:password>
             <d:email_id>test1@cs.com</d:email_id>
             <d:user_type_id m:type="Edm.Int32">3</d:user_type_id>
             <d:is_valid m:type="Edm.Boolean">true</d:is_valid>
             <d:registration_date m:type="Edm.DateTime">2012-10-25T11:20:08</d:registration_date>
           </m:properties>

我需要在以下内容中提取文本:

  1. <d:password> </d:password>
  2. <d:email_id></d:email_id>

<d:password> </d:password>和的内容<d:email_id></d:email_id>是动态的。

如何使用 javascript 字符串处理函数来提取所需的文本?

4

3 回答 3

1

假设您发布的所有字符串都存储在名为 myCode 的变量中,那么您需要从 myCode 中提取密码和电子邮件

var passwd = myCode.substring(myCode.indexOf("<d:password>")+12,myCode.length-myCode.indexOf("</d:password>"));
var email = myCode.substring(myCode.indexOf("<d:email_id>")+11,myCode.length-myCode.indexOf("</d:email_id>"));
于 2012-11-06T06:36:21.233 回答
1

如果这个字符串是规则的(即它的结构永远不会改变),那么你可以使用一个正则表达式,但是它非常接近不规则的 HTML/XML 并且正则表达式和不规则的不在一起。他们并没有太多在一起,以至于如果我什至建议使用正则表达式,我将在随后的投票风暴中失去所有代表。所以...

如果这个字符串是常规的,那么这是一个快速干净的可能解决方案:

String name = text.split(">")[6].split("<")[0];
String password = text.split(">")[8].split("<")[0];

在这里,幻数 6 和 8 是输入字符串中标签的索引。通过进一步的工作,您可能会完全丢失幻数,但如果结构是固定的,常量可能对它们有用。

或者,丢失幻数,也许更干净(尽管使用幻数作为'name>'和'password>'的长度)。

String name = text.substring(text.indexof("name>")+5).split("<")[0];
String password = text.substring(text.indexof("password>")+9).split("<")[0];

这两者都适用于任何长度的用户名和密码。

PS。当然,编程的第一条规则是,没有来自代码外部的永远不会改变的结构这样的东西;)

聚苯乙烯。当我说“任意长度”时,这当然受 Java 和 Dalvik VM 的限制;)

于 2012-11-06T07:38:15.097 回答
0

一个非常简单的答案,无需过多关注计数:

var password = text.split("<d:password>")[1].split("</d:password>")[0];
var email = text.split("<d:email_id>")[1].split("</d:email_id>")[0];

在这里,您唯一必须确保的是您没有多个相同的标签。如果存在多个,则第一个索引会说明您想要哪个出现。另一个保持为0。

于 2018-06-30T05:07:38.150 回答