我目前正在处理一些XML.
我有节点,如下所示:
<node>This is a string</node>
Run Code Online (Sandbox Code Playgroud)
我传递给节点的一些字符串将包含&,#,$等字符.
<node>This is a string & so is this</node>
Run Code Online (Sandbox Code Playgroud)
这是因为&
我无法将这些字符串包装在CDATA中,因为它们需要保持原样.我试过在线查找一些字符列表,这些字符无法放入XML节点而不是CDATA.
任何人都可以指向一个方向或向我提供非法字符列表吗?
除了Java之外,与此问题非常相似.
在Java中为XML输出编码字符串的推荐方法是什么?字符串可能包含"&","<"等字符.
我有一个XML文件,它是数据库的输出.我正在使用Java SAX解析器来解析XML并以不同的格式输出它.XML包含一些无效字符,解析器抛出"无效的Unicode字符(0x5)"之类的错误
除了预先处理文件并替换它们之外,有没有一种方法可以去除所有这些字符?到目前为止,我遇到了3个不同的无效字符(0x5,0x6和0x7).这是一个~4gb的数据库转储,我们将要处理它多次,所以每次我们得到一个新的转储来运行一个预处理器时,不得不再等30分钟,这将是一个痛苦,这不是我第一次遇到这个问题.
我有一个程序正在从twitter流api实时解析推文.在存储它们之前,我将它们编码为utf8.某些字符最终出现在字符串中?,??或??? 而不是他们各自的unicode代码并导致问题.经过进一步调查,我发现有问题的字符来自"表情符号"块,U + 1F600 - U + 1F64F,以及"其他符号和象形文字"块,U + 1F300 - U + 1F5FF.我尝试删除,但是不成功,因为匹配器最终替换了字符串中的几乎每个字符,而不仅仅是我想要的unicode范围.
String utf8tweet = "";
        try {
            byte[] utf8Bytes = status.getText().getBytes("UTF-8");
            utf8tweet = new String(utf8Bytes, "UTF-8");
        } 
        catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
Pattern unicodeOutliers = Pattern.compile("[\\u1f300-\\u1f64f]", Pattern.UNICODE_CASE | Pattern.CANON_EQ | Pattern.CASE_INSENSITIVE);
Matcher unicodeOutlierMatcher = unicodeOutliers.matcher(utf8tweet);
utf8tweet = unicodeOutlierMatcher.replaceAll(" ");
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能删除这些字符?
当我从twitter的Stream API读取数据然后写入xmlfile时.
但是一些特殊的角色�会导致错误(我的意思是当我在Chrome中打开xmlfile时,Chrome表示该角色出错了!)
我想�在写入xmlfile之前将编码序列()转换为真实字符( )!
怎么实现这个?
- - - - - - -添加 - - - - - - -
这是XMLFile内容:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<text>@carlyraejepsen would be a dream if you follow me, please follow me?, I love you so much you're my inspiration</text>
<text>someone please bring me a caramel apple and a mocha from black cat. i'll love you forever</text>
<text>“@G_MartinFlyKick: Marry me Juliet.I love you and that's all I really know.”����������</text>
<text>"I need …Run Code Online (Sandbox Code Playgroud) 我在使用MS Exchange Web服务(EWS)的客户端中使用CXF(v2.7.10)。
我发现EWS(UniqueHash)返回的元素之一包含在XML v1.0中无效的字符。由于对此我无能为力,因此我尝试使用入站拦截器来删除UniqueHash元素(我不需要它们),如下所示:
Map<String, String> inTransformMap = Collections.singletonMap(
        "{http://schemas.microsoft.com/exchange/services/2006/types}UniqueHash", "");
TransformInInterceptor transformInInterceptor = new TransformInInterceptor();
transformInInterceptor.setInTransformElements(inTransformMap);
client.getInInterceptors().add(transformInInterceptor);
Run Code Online (Sandbox Code Playgroud)
我可以看到转换(TransformInInterceptor)运行得很好并且很早(后流):
FINE: Chain org.apache.cxf.phase.PhaseInterceptorChain@be78549 was created. Current flow:
  receive [PolicyInInterceptor, LoggingInInterceptor, AttachmentInInterceptor]
  post-stream [TransformInInterceptor, StaxInInterceptor]
  read [WSDLGetInterceptor, ReadHeadersInterceptor, SoapActionInInterceptor, StartBodyInterceptor]
  pre-protocol [MustUnderstandInterceptor]
  post-protocol [CheckFaultInterceptor, JAXBAttachmentSchemaValidationHack]
  unmarshal [DocLiteralInInterceptor, SoapHeaderInterceptor]
  post-logical [WrapperClassInInterceptor]
  pre-invoke [SwAInInterceptor, HolderInInterceptor]
Run Code Online (Sandbox Code Playgroud)
但是,即使它似乎按预期的方式逐步执行代码,但当DocLiteralInInterceptor稍后触发时,它也会引发此编组错误(在这种情况下,0x4在我认为我已丢弃的UniqueHash元素内):
org.apache.cxf.interceptor.Fault: Unmarshalling Error: Illegal character entity: expansion character (code 0x4
 at [row,col {unknown-source}]: [1,2230] 
    at org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:881)
    at org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:702)
    at org.apache.cxf.jaxb.io.DataReaderImpl.read(DataReaderImpl.java:160)
    at org.apache.cxf.interceptor.DocLiteralInInterceptor.handleMessage(DocLiteralInInterceptor.java:192)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
    at …Run Code Online (Sandbox Code Playgroud)