作为后续这个问题,我现在有以下命令:
set +H && java -cp saxon-he-10.5.jar net.sf.saxon.Query -config:saxon.xml -s:rss.xml -qs:'//item/link!substring-after(., "_")'
撒克逊文件
<?xml version="1.0"?>
<!--
For documentation on the contents of a Saxon configuration file, see
http://www.saxonica.com/html/documentation/configuration/configuration-file/index.html
-->
<configuration edition="HE" xmlns="http://saxon.sf.net/ns/configuration"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://saxon.sf.net/ns/configuration config.xsd">
<global optimizationLevel="10"
stripSpace="ignorable"
recoveryPolicy="doNotRecover"
dtdValidationRecoverable="no" />
</configuration>
如何调整它以获得我想要的输出?
所需输出
92.204.241.167
181.24.239.244
193.243.195.66
当前输出
<?xml version="1.0" encoding="UTF-8"?>92.204.241.167 181.24.239.244 193.243.195.66
答案1
您可以在命令行上指定序列化属性,也可以将其作为查询本身的一部分,或者在配置文件中指定。在命令行上,使用例如
!indent=yes
请记住,对于某些 shell,!
需要将其转义为\!
.
在查询中,使用例如declare option output:indent "yes";
。
在配置文件中指定<serialization indent="yes"/>
您可以在此处考虑的序列化参数包括:
method=text
- 抑制 XML 声明并防止转义特殊字符,例如&
.omit-xml-declaration=yes
- 抑制 XML 声明但不阻止转义item-separator=\n
- 使用换行符而不是单个空格作为项目之间的分隔符。这里的问题是如何表示换行符。对于 shell,\n
是最有可能的候选者,但可能需要用引号引起来,并且不同 shell 的情况可能有所不同。在查询中或在配置文件中,需要将其编写为

.
最后,作为使用项目分隔符序列化属性的替代方法,您可以将换行符作为查询本身的一部分引入,方法是将其编写为
(//item/link!substring-after(., "_")) => string-join("
")