2012-04-14 53 views
20

Tôi đang sử dụng Java 6. Tôi có sự phụ thuộc này trong pom của tôi ...Khắc phục cho 'Chuỗi ký tự' - "không được phép trong các nhận xét". ngoại lệ?

  <dependency> 
        <groupId>xerces</groupId> 
        <artifactId>xercesImpl</artifactId> 
        <version>2.10.0</version> 
      </dependency> 

Tôi đang cố gắng để phân tích một doc XHTML với dòng này

<!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves/> <w:TrackFormatting/> <w:PunctuationKerning/> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF/> <w:LidThemeOther>EN-US</w:LidThemeOther> <w:LidThemeAsian>JA</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> <w:SplitPgBreakAndParaMark/> <w:EnableOpenTypeKerning/> <w:DontFlipMirrorIndents/> <w:OverrideTableStyleHps/> <w:UseFELayout/> </w:Compatibility> <m:mathPr> <m:mathFont m:val="Cambria Math"/> <m:brkBin m:val="before"/> <m:brkBinSub m:val="--"/> <m:smallFrac m:val="off"/> <m:dispDef/> <m:lMargin m:val="0"/> <m:rMargin m:val="0"/> <m:defJc m:val="centerGroup"/> <m:wrapIndent m:val="1440"/> <m:intLim m:val="subSup"/> <m:naryLim m:val="undOvr"/> </m:mathPr></w:WordDocument> </xml><![endif]--> 

sử dụng mã này .. .

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    factory.setValidating(false); 
    factory.setExpandEntityReferences(false); 
    factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); 
    final DocumentBuilder builder = factory.newDocumentBuilder(); 
    final InputSource s = new InputSource(new StringReader(str)); 
    org.w3c.dom.Document result = builder.parse(s); 

nhưng phân tích của tôi đang hấp hối với ngoại lệ sau ...

[Fatal Error] :91:947: The string "--" is not permitted within comments. 
org.xml.sax.SAXParseException: The string "--" is not permitted within comments. 
    at org.apache.xerces.parsers.DOMParser.parse(Unknown Source) 
    at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source) 
    at com.myco.myproject.util.XmlUtilities.getStringAsDocument(XmlUtilities.java:201) 
    at com.myco.myproject.util.NetUtilities.getUrlAsDocument(NetUtilities.java:67) 
    at com.myco.myproject.parsers.impl.ForesightEventsParser.getEventsFromElement(ForesightEventsParser.java:133) 
    at com.myco.myproject.parsers.impl.ForesightEventsParser.parsePage(ForesightEventsParser.java:99) 
    at com.myco.myproject.parsers.impl.ForesightEventsParser.getEvents(ForesightEventsParser.java:58) 
    at com.myco.myproject.domain.EventFeed.refresh(EventFeed.java:87) 
    at com.myco.myproject.domain.EventFeed.getEvents(EventFeed.java:72) 
    at com.myco.myproject.parsers.impl.ForesightParserTest.testParser(ForesightParserTest.java:49) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74) 
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83) 
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 

Nếu không thay đổi XHTML của tôi, bất kỳ ai biết cách tôi có thể phân tích cú pháp tài liệu này thành công?

Chỉnh sửa Mỗi nhận xét được đưa ra, tôi đã xóa cụm từ "đúng ngữ pháp" khỏi câu hỏi ban đầu của mình. Tôi vẫn thực sự quan tâm đến cách làm cho ngoại lệ này biến mất mà không thay đổi văn bản tôi đang phân tích cú pháp (mà tôi không có quyền kiểm soát). Với mục đích của câu hỏi này, bạn có thể giả định "-" trong các nhận xét là vi phạm duy nhất của thuật ngữ "được hình thành tốt".

+5

Nhận xét chứa '' làm cho tài liệu này không được hình thành tốt. Như đã lưu ý trong câu trả lời, bạn cần thay đổi phần đó. –

+6

"XHTML được tạo đúng" Không, điều này không đúng. XHTML được định dạng tốt là XML được định dạng tốt và XML được định dạng tốt không có "-" bên trong nhận xét. –

Trả lời

20

By definition:

Một bình luận bắt đầu và kết thúc với "-", và không chứa bất kỳ xảy ra "-".

Vì vậy, không, XHTML của bạn không được định dạng tốt vì bạn không thể sử dụng -- ở bất kỳ đâu trong nhận xét. Bạn có thể thay thế nó bằng cái gì khác không? hoặc có thể đặt một khoảng trống ở giữa, như sau: - -. Có thực sự không phải là một giải pháp sạch cho vấn đề này, bất kỳ lựa chọn thay thế liên quan đến rối tung xung quanh với giữ chỗ, mã hóa, vv

+2

Đáng buồn là một số trình soạn thảo XML sẽ không bắt được lỗi này, nhưng các trình phân tích cú pháp XML nghiêm ngặt sẽ vẫn chết trên đó. Vì vậy, hãy chắc chắn rằng bạn đã có một trình soạn thảo nghiêm ngặt. –

Các vấn đề liên quan