2012-11-06 34 views
0

我有一个字符串,它看起来像一个XML文件,但实际上它只是保存在变量中的普通字符串。使用javascript在两个词之间获取文本

是这样的:

<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>[email protected]</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:email_id></d:email_id>是动态的。

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

+1

您应该**真的**为此使用XML解析器。 – ThiefMaster

+0

[Titanium具有强大,快速且易于使用的DOM解析器](http://docs.appcelerator.com/titanium/latest/#!/api/Titanium.XML-method-parseString),为什么heck你在使用字符串函数吗? –

回答

1

IF这个字符串是定期(即它的结构永远不会改变),那么你可以使用正则表达式,但它非常接近HTML/XML,这是不规则的,正则表达式和不规则不会在一起。他们不会一起走到一起,如果我甚至建议一个正则表达式,我会在随后的暴风雨中失去所有的代表。所以......

IF这个字符串是规律的,那么这是快速和干净的一个可能的解决方案:

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。当然,编程的第一条规则是,不存在来自代码之外的结构,它永远不会改变;

PPS。当我说'任何长度'时,这当然受到Java和Dalvik VM的限制;)

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>")); 
+0

的长度可能不是静态的。所以基于这个计算可能不是一个好主意! – kittu88

+0

我知道,但至少它满足了这个特殊情况的要求,不是吗? – Ahmad

+0

是的,但这不会是一个永久的解决方案,因为它总是在变化。该字符串实际上是一个服务器响应。那么他们有什么方法可以解决特定的复杂问题? – kittu88

相关问题