2017-05-06 9 views
1

文字列からすべてのNULL文字を削除したいと思います。私は右の正規表現の一致がなければならないことを知っている\ X00と私は、次のXQueryを試してみた:XQueryの正規表現はヌル文字にマッチできますか?

replace($message, '\x00', '')

それはエラーになります:

exerr:ERROR Conversion from XPath2 to Java regular expression syntax failed: Error at character 1 in regular expression \x00: invalid escape sequence

は、任意の迅速な解決策はありますかこの問題の回避策?私はeXist-db 2.2を使用します。

答えて

1

短いバージョン:少なくともXQueryとXML仕様の境界内にはありません。私が気付いていないeXist-DB独自の方法があるかもしれませんが(XREeryのJava正規表現関数とネイティブにインタフェースするようなものですが、これは「迅速な解決策または回避策」とは考えません)。

XPath and XQuery Functions and Operators 3.0 specification which also contains the definition of regular expressions for XQuery 3.0を見ると、ユニコードコードポイントでエスケープする方法はありません。 \x00の構文は、正規表現の実装に固有のものです。 regular-expressions.info verifies this assumption:NULLバイトを示すためにXMLエンティティを使用して

  1. :これを考慮

    XML regular expressions don't have any tokens like \xFF or \uFFFF to match particular (non-printable) characters. You have to add them as literal characters to your regex. If you are entering the regex into an XML file using a plain text editor, then you can use the  XML syntax. Otherwise, you'll need to paste in the characters from a character map.

    は、二つの選択肢があるかもしれません。追加restriction of allowed characters in the same specification

    CharRef ::=  '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';' 
    

    :XML仕様はdefinition in Extensible Markup Language (XML) 1.0 (Fifth Edition)によって制御文字を許可しないようこれは、こともできない

    Char  ::=  #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] 
    /* any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */ 
    

    XML 1.1 extends this definition to control charactersを - それらのすべてが、nullバイトを含みます:最後に

    Char  ::=  [#x1-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] 
    /* any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */ 
    

    XQuery relies on the same specification considering allowed characters

    Char  ::=  [http://www.w3.org/TR/REC-xml#NT-Char] 
    
  2. XQueryドキュメントにnullバイトを直接含めます。別に、実際に問題(ファイル内のNULLバイトを含むが、多くの場合、様々な種類の予期しない問題が発生します)から、same limitations to characters as defined above apply(上で定義した整形式のXML文書が文字のみで構成する必要があります):

    document  ::=  (prolog element Misc*) - (Char* RestrictedChar Char*) 
    

    ありWhy are “control” characters illegal in XML 1.0?

+0

eXist-dbのhttpclientライブラリのXML応答に、多くのNULL文字が入ります。実際には '%00'の先頭にURLエンコードされています。私は文字列をデコードしていて、NULL文字を削除しようとしていました。答えが与えられたので、今度は解読の前にそれらを削除します。 – lagivan

1

でこの拡張の議論は基本的には、その答えは、文字列内の任意のNUL(X00)の文字があることができないということです。 XML、したがってXDMデータ・モデルは、それらを許可しません。したがって、あなたの意見にそれらが現れるならば、あなたは既に標準の範囲外です。

+0

eXist-dbのhttpclientライブラリのXML応答に多くのNULL文字があります。しかし、実際には '%00'の先頭にURLエンコードされています。私は文字列をデコードしていて、NULL文字を削除しようとしていました。答えが与えられたら、今度は解読の前にそれらを削除します。 – lagivan

関連する問題