2013-12-01 2 views
0

Мне нужно найти способ проверить двойные кавычки в строке, чтобы я мог записать результат в XML-документ, а затем открыть его словом. Я понял, как искать одну цитату вроде ('), но двойная цитата бросает ошибку в мой XML-документ.Java Double Quote

 private String checkForDoubleQuote(String l) { 
    String newLine = new String(); 
    char d = '\"'; 


    for (int index=0;index < l.length();index++) { 
     if(l.indexOf(8220)>-1 || l.indexOf(8221)>-1 || 
       l.indexOf(34)>-1) { 
      char c = l.charAt(index);  
      newLine += c; 
     } else { 
      char c = l.charAt(index);  
      newLine += c; 
     } 

    } 
    System.out.println("new Line --> " + newLine); 
    return newLine; 
} 

Вот вывод XML слово, которое вызывает неприятность:. (Два квадратная коробка x93 и x94 в коде XML

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<?mso-application progid="Word.Document"?> 
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml"> 
<w:body> 
<w:p> 
<w:r> 
<w:rPr> 
<w:b/> 
</w:rPr> 
<w:t></w:t> 
<w:t>x93That was close,x94 Lester said between breaths.</w:t> 
</w:r> 
</w:p> 
</w:body> 
</w:wordDocument> 
+1

Буквенные коды символов '' 0x93' и 0x94' являются Windows-1252 коды для кудрявых открывать и закрывать кавычки и не должны отображаться в XML, объявленном как UTF-8. – usr2564301

ответ

2

Если вы хотите, чтобы лишить все singlequote и двойные кавычки символы из строки, а также те глупые специальные цитаты, которые MS Office подбрасывает в, вот способ сделать это:

public static String stripQuote(String l) { 
    StringBuffer newLine = new StringBuffer(); 

    for (int i=0; i<l.length(); i++) { 
     char ch = l.charAt(i); 
     if (ch==8220 || ch==8221 || ch=='\"' || ch=='\'') { 
      //do nothing 
     } 
     else { 
      newLine.append(ch); 
     } 
    } 
    return newLine.toString(); 
} 

вами код, используемый в примере конструкции много строк над процессом линии. Это построение только одного.

Вам также нужно беспокоиться о символах угловой скорости («<»).

Однако, если вместо того, чтобы обнажать их, вы хотите, чтобы кодировать их должным образом в XML, вы можете сделать это:

public static String encodeQuote(String l) { 
    StringBuffer newLine = new StringBuffer(); 

    for (int i=0; i<l.length(); i++) { 
     char ch = l.charAt(i); 
     if (ch==8220 || ch==8221 || ch=='\"') { 
      newLine.appent("&quot;"); 
     } 
     else if (ch=='<') { 
      newLine.appent("&lt;"); 
     } 
     else if (ch=='>') { 
      newLine.appent("&gt;"); 
     } 
     else if (ch=='\'') { 
      newLine.appent("&#39;"); 
     } 
     else { 
      newLine.append(ch); 
     } 
    } 
    return newLine.toString(); 
} 
+0

Цитаты не нуждаются в экранировании в XML; нужны только 'lt',' gt' & 'amp'. (Далее: '"' * может * поднять «неопределенный объект», если он не объявлен в wordml.) – usr2564301

+1

Вы правы! Я часто их конвертирую, поэтому я могу использовать ту же самую кодировку для значений атрибутов, что и для контента. Для XML " является одним из пяти стандартных объектов - должен быть действительным везде. – AgilePro

+0

«Андрей, ты должен что-нибудь придумать», - умолял он. <- Эта строка текста будет бросать и ошибки в одиночной кавычки, но она будет работать над некоторыми одинарными кавычками. Почему эта работа иногда и не работает в другие времена. Он будет работать над чем-то вроде этого. Одинаковые кавычки. –

Смежные вопросы