У меня есть XML-файл, который содержит кавычки следующим образомЗаменить двойные кавычки с " в XML файл
<feast key="NAME" value="NAME TEST 'xxxxx"yyyy' $"/>
Мне нужно заменить xxxxx"yyyy
на xxxxx"yyyy
в всех случаях.
Примечание: xxxxx и yyyy определяются пользователем. Таким образом, это может быть любой формы.
Здесь я включил образец XML и код для разбора.
TestSaxParse.xml
<?xml version="1.0" encoding="US-ASCII" ?>
<TEST Office="TEST Office">
<LINE key="112313133320">
<TESTNO value="0"/>
<FEATURE>
<feast key="001" value="001"/>
<feast key="NAME" value="NAME TEST 'xxxxx_&_yyyy' $"/>
</FEATURE>
</LINE>
<LINE key="112313133321">
<TESTNO value="0"/>
<FEATURE>
<feast key="002" value="002"/>
<feast key="NAME" value="NAME TEST 'xxxxx"yyyy' $"/>
</FEATURE>
</LINE>
</TEST>
SaxParseEx.java
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class SaxParseEx extends DefaultHandler{
private static String xmlFilePath = "/home/system/TestSAXParse.xml";
public static void main(String[] args) {
SaxParseEx SaxParseEx = new SaxParseEx();
SAXParserFactory fact = SAXParserFactory.newInstance();
SAXParser parser;
try {
Path path = Paths.get(xmlFilePath);
Charset charset = StandardCharsets.UTF_8;
String content = new String(Files.readAllBytes(path), charset);
// replace & with &
content = content.replaceAll("(&(?!amp;))", "&");
// content = content.replaceAll("(\"(?!quot;))", """); Need regex to replace " with " only on specific place where i mentioned above
// Write updated content to XML file
Files.write(path, content.getBytes(charset));
// XML Parsing
parser = fact.newSAXParser();
parser.parse(new File(xmlFilePath), SaxParseEx);
System.out.println("PARSE SUCCESS");
return;
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("PARSE FAILED");
}
}
O/P
org.xml.sax.SAXParseException; systemId: file:/home/system/TestSAXParse.xml; lineNumber: 14; columnNumber: 46; Element type "feast" must be followed by either attribute specifications, ">" or "/>".
я заменить все &
с &
зафиксировать SAXParseException на линии № 7. Я не могу заменить "
с "
EDIT:
Я не могу использовать this answer. Я ищу другое решение из-за
- XML-файл большого размера (> 100MB)
- Так я думаю, что это не представляется возможное собрать и заменить каждую строку в пределах значений двойных кавычек, как предложено в ответе ,
- Я ищу заменить все как как
content = content.replaceAll("(&(?!amp;))", "&");
Есть ли возможность написать регулярное выражение, как это?
Параметр '' & ', прежде чем GT; и' л; 'не должен быть заменен либо, по-моему. Это должно быть 'content.replaceAll (" & (?! amp; | [gl] t;) "," & ");' –
, поскольку ваш xml недействителен, чтобы начать с него логически, не может быть проанализирован. Проблема заключается в том, что '' xxxxx "' заканчивает тэг xml и вы получаете ошибку синтаксического анализа. – SomeJavaGuy
проверьте следующие темы: http://stackoverflow.com/questions/33744460/java-removing-the-double-quotes- in-xml-attributes http://stackoverflow.com/questions/37176682/replace-double-quotes-within-attributes-only-in-xml-c-sharp –