我有一个字符串,它看起来像一个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>
我需要在以下内容中提取文字:
<d:password> </d:password>
<d:email_id></d:email_id>
<d:password> </d:password>
和<d:email_id></d:email_id>
的内容是动态的。
如何使用javascript字符串处理函数来提取所需的文本?
答案 0 :(得分: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>"));
答案 1 :(得分:1)
IF 这个字符串是常规的(即它的结构永远不会改变),那么你可以使用正则表达式,但它非常接近HTML / XML,这是不规则的和正则表达式和不规则的不要在一起。如果我甚至建议使用正则表达式,那么他们就不会聚集在一起,我会在随后的风暴风暴中失去我所有的代表。所以......
IF 这个字符串是常规的,那么这是一个快速和干净的可能解决方案:
String name = text.split(">")[6].split("<")[0];
String password = text.split(">")[8].split("<")[0];
这里,幻数6和8是输入字符串中标签的索引。通过稍微进一步的工作,你可以完全失去神奇的数字,但如果结构是固定的,常量可能对他们有效。
或者,丢失神奇的数字,也许更干净(尽管使用魔术数字代表'name&gt;'和'password&gt;')。
String name = text.substring(text.indexof("name>")+5).split("<")[0];
String password = text.substring(text.indexof("password>")+9).split("<")[0];
这两种方法都适用于任何长度的用户名和密码。
PS。当然,编程的第一条规则就是没有来自代码之外的结构永远不会改变;)
PPS。当我说“任何长度”时,这当然受到Java和Dalvik VM的限制;)
答案 2 :(得分: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。