2012-11-06 32 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

相關問題