2013-10-10 118 views
0

我发现了一个问题,在分析XML文件问题在解析XML

这是XML文件(如字符串)的样本:

<ns:fetchXmlResponse xmlns:ns=\ " http:/ws.src.com \> 
    <ns:return> 
     <?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?> 
     <TemplateData> 
      <TemplatePrescriptionData> 
       <id>24</id> 
       <noOfRefills>1</noOfRefills> 
       <templateId>67</templateId> 
       <templatePrescriptionMaintainanceId>0 
       </templatePrescriptionMaintainanceId> 
       <prescriptionName>Norco</prescriptionName> 
       <prescriptionStrength>5/325</prescriptionStrength> 
       <prescriptionUnit>mg</prescriptionUnit> 
       <prescriptionForm>Tablet(s)</prescriptionForm> 
       <prescriptionSignature>1-2tabs po q4-6 hours, prn 
       </prescriptionSignature> 
       <prescriptionWarnings></prescriptionWarnings> 
       <prescriptionComments></prescriptionComments> 
       <prescriptionQuantity>15</prescriptionQuantity> 
       <statusCode>true</statusCode> 
       <createDate>2009-07-22T00:00:00+05:30</createDate> 
       <updateDate>2009-07-22T00:00:00+05:30</updateDate> 
      </TemplatePrescriptionData> 
      <TemplatePrescriptionData> 
       <id>25</id> 
       <noOfRefills>2</noOfRefills> 
       <templateId>67</templateId> 
       <templatePrescriptionMaintainanceId>0 
       </templatePrescriptionMaintainanceId> 
       <prescriptionName>Motrin 
       </prescriptionName> 
       <prescriptionStrength>600</prescriptionStrength> 
       <prescriptionUnit>mg</prescriptionUnit> 
       <prescriptionForm>Tablet(s)</prescriptionForm> 
       <prescriptionSignature>1tab po q6 hours, 
       </prescriptionSignature> 
       <prescriptionWarnings></prescriptionWarnings> 
       <prescriptionComments></prescriptionComments> 
       <prescriptionQuantity>28</prescriptionQuantity> 
       <statusCode>true</statusCode> 
       <createDate>2009-07-22T00:00:00+05:30</createDate> 
       <updateDate>2009-07-22T00:00:00+05:30</updateDate> 
      </TemplatePrescriptionData> 
      <TemplatePrescriptionData> 
       <id>26</id> 
       <noOfRefills>2</noOfRefills> 
       <templateId>67</templateId> 
       <templatePrescriptionMaintainanceId>0 
       </templatePrescriptionMaintainanceId> 
       <prescriptionName>Chlorhexidine</prescriptionName> 
       <prescriptionStrength>0.12</prescriptionStrength> 
       <prescriptionUnit>%</prescriptionUnit> 
       <prescriptionForm>Mouth 
       </prescriptionForm> 
       <prescriptionSignature>rinse mouth bid 
       </prescriptionSignature> 
       <prescriptionWarnings></prescriptionWarnings> 
       <prescriptionComments></prescriptionComments> 
       <prescriptionQuantity>1</prescriptionQuantity> 
       <statusCode>true</statusCode> 
       <createDate>2009-07-22T00:00:00+05:30</createDate> 
       <updateDate>2009-07-22T00:00:00+05:30</updateDate> 
      </TemplatePrescriptionData> 
      <TemplatePrescriptionData> 
       <id>28</id> 
       <noOfRefills>1</noOfRefills> 
       <templateId>76</templateId> 
       <templatePrescriptionMaintainanceId>0 
       </templatePrescriptionMaintainanceId> 
       <prescriptionName>Norco</prescriptionName> 
       <prescriptionStrength>5/325</prescriptionStrength> 
       <prescriptionUnit>mg</prescriptionUnit> 
       <prescriptionForm>Tablet(s)</prescriptionForm> 
       <prescriptionSignature>1-2tabs po q4-6 hours, prn 
       </prescriptionSignature> 
       <prescriptionWarnings></prescriptionWarnings> 
       <prescriptionComments></prescriptionComments> 
       <prescriptionQuantity>15</prescriptionQuantity> 
       <statusCode>true</statusCode> 
       <createDate>2009-07-22T00:00:00+05:30</createDate> 
       <updateDate>2009-07-22T00:00:00+05:30</updateDate> 
      </TemplatePrescriptionData> 
      <TemplatePrescriptionData> 
       <id>30</id> 
       <noOfRefills>2</noOfRefills> 
       <templateId>76</templateId> 
       <templatePrescriptionMaintainanceId>0 
       </templatePrescriptionMaintainanceId> 
       <prescriptionName>Motrin 
       </prescriptionName> 
       <prescriptionStrength>600</prescriptionStrength> 
       <prescriptionUnit>mg</prescriptionUnit> 
       <prescriptionForm>Tablet(s)</prescriptionForm> 
       <prescriptionSignature>1tab po q6 hours,prn 
       </prescriptionSignature> 
       <prescriptionWarnings></prescriptionWarnings> 
       <prescriptionComments></prescriptionComments> 
       <prescriptionQuantity>28</prescriptionQuantity> 
       <statusCode>true</statusCode> 
       <createDate>2009-07-22T00:00:00+05:30</createDate> 
       <updateDate>2009-07-22T00:00:00+05:30</updateDate> 
      </TemplatePrescriptionData> 
      <TemplatePrescriptionData> 
       <id>31</id> 
       <noOfRefills>2</noOfRefills> 
       <templateId>76</templateId> 
       <templatePrescriptionMaintainanceId>0 
       </templatePrescriptionMaintainanceId> 
       <prescriptionName>Chlorhexidine</prescriptionName> 
       <prescriptionStrength>0.12</prescriptionStrength> 
       <prescriptionUnit>%</prescriptionUnit> 
       <prescriptionForm>MouthRinse 
       </prescriptionForm> 
       <prescriptionSignature>rinse mouth bid(withexpectoration) 
       </prescriptionSignature> 
       <prescriptionWarnings></prescriptionWarnings> 
       <prescriptionComments></prescriptionComments> 
       <prescriptionQuantity>1</prescriptionQuantity> 
       <statusCode>true</statusCode> 
       <createDate>2009-07-22T00:00:00+05:30</createDate> 
       <updateDate>2009-07-22T00:00:00+05:30</updateDate> 
      </TemplatePrescriptionData> 
      <TemplatePrescriptionData> 
       <id>32</id> 
       <noOfRefills>1</noOfRefills> 
       <templateId>79</templateId> 
       <templatePrescriptionMaintainanceId>0 
       </templatePrescriptionMaintainanceId> 
       <prescriptionName>Norco</prescriptionName> 
       <prescriptionStrength>5/325</prescriptionStrength> 
       <prescriptionUnit>mg</prescriptionUnit> 
       <prescriptionForm>Tablet(s)</prescriptionForm> 
       <prescriptionSignature>1-2tabs po q4-6 hours, prn</prescriptionSignature> 
       <prescriptionWarnings></prescriptionWarnings> 
       <prescriptionComments></prescriptionComments> 
       <prescriptionQuantity>15</prescriptionQuantity> 
       <statusCode>true</statusCode> 
       <createDate>2009-07-22T00:00:00+05:30</createDate> 
       <updateDate>2009-07-22T00:00:00+05:30</updateDate> 
      </TemplatePrescriptionData> 
      <TemplatePrescriptionData> 
       <id>33</id> 
       <noOfRefills>2</noOfRefills> 
       <templateId>79</templateId> 
       <templatePrescriptionMaintainanceId>0 
       </templatePrescriptionMaintainanceId> 
       <prescriptionName>Motrin 
       </prescriptionName> 
       <prescriptionStrength>600</prescriptionStrength> 
       <prescriptionUnit>mg</prescriptionUnit> 
       <prescriptionForm>Tablet(s)</prescriptionForm> 
       <prescriptionSignature>1tab po q6 hours,prn</prescriptionSignature> 
       <prescriptionWarnings></prescriptionWarnings> 
       <prescriptionComments></prescriptionComments> 
       <prescriptionQuantity>28</prescriptionQuantity> 
       <statusCode>true</statusCode> 
       <createDate>2009-07-22T00:00:00+05:30</createDate> 
       <updateDate>2009-07-22T00:00:00+05:30</updateDate> 
      </TemplatePrescriptionData> 
     </TemplateData> 
    </ns:return> 
</ns:fetchXmlResponse> 

代码:

var xmlDoc=loadXMLString(Above XML file); 

//Then i'm fetching "ns:return" node(Which is also an XML file) 
var returnNode = String(xmlDoc.getElementsByTagName("ns:return")[0].childNodes[0].nodeValue); 

loadXMLString funciton

function loadXMLString(txt) 
{ 
if (window.DOMParser) 
    { 
    parser=new DOMParser(); 
    xmlDoc=parser.parseFromString(txt,"text/xml"); 
    } 
else // Internet Explorer 
    { 
    xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); 
    xmlDoc.async=false; 
    xmlDoc.loadXML(txt); 
    } 

现在的问题是returnNode变量是有整体XMLFILE的只是4048字符inspite

样品:

<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?> 
<TemplateData> 
    <TemplatePrescriptionData> 
     <id>24</id> 
     <noOfRefills>1</noOfRefills> 
     <templateId>67</templateId> 
     <templatePrescriptionMaintainanceId>0</templatePrescriptionMaintainanceId> 
     <prescriptionName>Norco</prescriptionName> 
     <prescriptionStrength>5/325</prescriptionStrength> 
     <prescriptionUnit>mg</prescriptionUnit> 
     <prescriptionForm>Tablet(s)</prescriptionForm> 
     <prescriptionSignature>1-2 tabs po q4-6 hours, prn 
     </prescriptionSignature> 
     <prescriptionWarnings></prescriptionWarnings> 
     <prescriptionComments></prescriptionComments> 
     <prescriptionQuantity>15</prescriptionQuantity> 
     <statusCode>true</statusCode> 
     <createDate>2009-07-22T00:00:00+05:30</createDate> 
     <updateDate>2009-07-22T00:00:00+05:30</updateDate> 
    </TemplatePrescriptionData> 
    <TemplatePrescriptionData> 
     <id>25</id> 
     <noOfRefills>2</noOfRefills> 
     <templateId>67</templateId> 
     <templatePrescriptionMaintainanceId>0 
     </templatePrescriptionMaintainanceId> 
     <prescriptionName>Motrin </prescriptionName> 
     <prescriptionStrength>600</prescriptionStrength> 
     <prescriptionUnit>mg</prescriptionUnit> 
     <prescriptionForm>Tablet(s)</prescriptionForm> 
     <prescriptionSignature>1 tab po q6 hours, prn</prescriptionSignature> 
     <prescriptionWarnings></prescriptionWarnings> 
     <prescriptionComments></prescriptionComments> 
     <prescriptionQuantity>28</prescriptionQuantity> 
     <statusCode>true</statusCode> 
     <createDate>2009-07-22T00:00:00+05:30</createDate> 
     <updateDate>2009-07-22T00:00:00+05:30</updateDate> 
    </TemplatePrescriptionData> 
    <TemplatePrescriptionData> 
     <id>26</id> 
     <noOfRefills>2</noOfRefills> 
     <templateId>67</templateId> 
     <templatePrescriptionMaintainanceId>0 
     </templatePrescriptionMaintainanceId> 
     <prescriptionName>Chlorhexidine</prescriptionName> 
     <prescriptionStrength>0.12</prescriptionStrength> 
     <prescriptionUnit>%</prescriptionUnit> 
     <prescriptionForm>Mouth Rinse</prescriptionForm> 
     <prescriptionSignature>rinse mouth bid (with expectoration) 
     </prescriptionSignature> 
     <prescriptionWarnings></prescriptionWarnings> 
     <prescriptionComments></prescriptionComments> 
     <prescriptionQuantity>1</prescriptionQuantity> 
     <statusCode>true</statusCode> 
     <createDate>2009-07-22T00:00:00+05:30</createDate> 
     <updateDate>2009-07-22T00:00:00+05:30</updateDate> 
    </TemplatePrescriptionData> 
    <TemplatePrescriptionData> 
     <id>28</id> 
     <noOfRefills>1</noOfRefills> 
     <templateId>76</templateId> 
     <templatePrescriptionMaintainanceId>0 
     </templatePrescriptionMaintainanceId> 
     <prescriptionName>Norco</prescriptionName> 
     <prescriptionStrength>5/325</prescriptionStrength> 
     <prescriptionUnit>mg</prescriptionUnit> 
     <prescriptionForm>Tablet(s)</prescriptionForm> 
     <prescriptionSignature>1-2 tabs po q4-6 hours, prn 
     </prescriptionSignature> 
     <prescriptionWarnings></prescriptionWarnings> 
     <prescriptionComments></prescriptionComments> 
     <prescriptionQuantity>15</prescriptionQuantity> 
     <statusCode>true</statusCode> 
     <createDate>2009-07-22T00:00:00+05:30</createDate> 
     <updateDate>2009-07-22T00:00:00+05:30</updateDate> 
    </TemplatePrescriptionData> 
    <TemplatePrescriptionData> 
     <id>30</id> 
     <noOfRefills>2</noOfRefills> 
     <templateId>76</templateId> 
     <templatePrescriptionMaintainanceId>0 
     </templatePrescriptionMaintainanceId> 
     <prescriptionName>Motrin </prescriptionName> 
     <prescriptionStrength>600</prescriptionStrength> 
     <prescriptionUnit>mg</prescriptionUnit> 
     <prescriptionForm>Tablet(s)</prescriptionForm> 
     <prescriptionSignature>1 tab po q6 hours, prn</prescriptionSignature> 
     <prescriptionWarnings></prescriptionWarnings> 
     <prescriptionComments></prescriptionComments> 
     <prescriptionQuantity>28</prescriptionQuantity> 
     <statusCode>true</statusCode> 
     <createDate>2009-07-22T00:00:00+05:30</createDate> 
     <updateDate>2009-07-22T00:00:00+05:30</updateDate> 
    </TemplatePrescriptionData> 
    <TemplatePrescriptionData> 
     <id>31</id> 
     <noOfRefills>2</noOfRefills> 
     <templateId>76</templateId> 
     <templatePrescriptionMaintainanceId>0 
     </templatePrescriptionMaintainanceId> 
     <prescriptionName>Chlorhexidine</prescriptionName> 
     <prescriptionStrength>0.12</prescriptionStrength> 
     <prescriptionUnit>%</prescriptionUnit> 
     <prescriptionForm>Mouth Rinse</prescriptionForm> 
     <prescriptionSignature>rinse mouth bid (with expectoration) 
     </pr 

注:我曾尝试与jQuery但首先它验证数据并抛出Invalid XML例外。
我也验证过这个文件,它在我的文件中显示"The processing instruction target matching "[xX][mM][lL]" is not allowed."
任何人都可以帮助我解决这个问题,或者你可以建议我一些棘手的方式来处理这种类型的XML文件? XML中

+1

尝试使用jQuery http://tech.pro/tutorial/877/xml-parsing-with-jquery –

+0

@VinodLouis没有好友jQuery是禁止解析,这就是为什么问题是在这里 – Jaykishan

+0

“禁止”是强大的工作......它有什么问题? – ChrisW

回答

1

XML将是有问题的,除非它被包裹在<![CDATA[ ... ]]>这将让你获得内部XML作为一个字符串,然后你可以解析...

var inner = xmlDoc.getElementsByTagName("return")[0].textContent; 

或删除XML Processsing在解析之前从内部xml执行指令,如果外部XML也有匹配的PI,则可能需要更清楚些。

var d= ...your xml... 
d = d.replace("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" , ""); 
var xmlDoc = loadXMLString(d); 

var templateData = xmlDoc.getElementsByTagName("TemplateData"); 
+0

是的,这是一个不错的选择。我认为这将工作,如果我使用jQuery的这个技巧 – Jaykishan