XMLStarlet编辑:
xmlstarlet ed -O -u "/include/X-PRE-PROCESS[@cmd='set' and starts-with(@data,'domain=')]/@data" -v 'domain=test.domain' vars.xml
目标文件:
<include>
<X-PRE-PROCESS cmd="set" data="domain=domain.com"/>
<X-PRE-PROCESS cmd="set" data="bong-ring=v=-7;%(100,0,941.0,1477.0);v=-7;>=2;+=.1;%(1400,0,350,440)"/>
</include>
更改必要的data="domain=domain.com"
值,
但也会在字符串值>
中返回意外(对我来说)>
更改为bong-ring=...
,以便>=2
变为>=2
<include>
<X-PRE-PROCESS cmd="set" data="domain=test.domain"/>
<X-PRE-PROCESS cmd="set" data="bong-ring=v=-7;%(100,0,941.0,1477.0);v=-7;>=2;+=.1;%(1400,0,350,440)"/>
</include>
">"
不受引号""
保护吗?
所以问题是:
XMLStarlet中是否存在错误,或者是应用程序(Freeswitch v1.7)中的错误,它使用vars.xml并解析了<X-PRE-PROCESS cmd="set" data="bong-ring=v=-7;%(100,0,941.0,1477.0);v=-7;>=2;+=.1;%(1400,0,350,440)"/>
作为
v=-7;%(100,0,941.0,1477.0);v=-7;>=2;+=.1;%(1400,0,350,440)
答案 0 :(得分:4)
XMLStarlet没有任何问题。
import java.util.*;
public class Problem8
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
int a = scan.nextInt();
int b = scan.nextInt();
int c = scan.nextInt();
boolean equalOK = true;
equalOK = scan.nextBoolean();
if(c > b && c > a && b > a)
{
System.out.println("Strictly Increasing Order");
}
else if((a == b && c > b && equalOK) || (b == c && c > a && equalOK) || (a == b && b == c && equalOK))
{
System.out.println("Increasing Order");
}
else
{
System.out.println("Not in Order");
}
}
}
正在受到保护的概念&#34;引用是错误的。从技术上讲,>
在属性值中是 legal ,而不是>
,这是非法的(在文本节点值中也是<
)。
通常工具会转义XML保留字符而不管上下文(*),因此文本节点将包含>
,属性也将包含>
。这没有什么不妥。
但是,实质上属性值或文本节点值中的每个字符都可以被转义。
以下是完全合法的XML,它与您的两个样本完全等效:
>
归结为:XML不是字符串。不要把它当成一个人。不要使用或创建将XML视为字符串的工具。 XML需要一个解析器 - 在这种情况下,所有符合标准的解析器都会做正确的事情。
(*)从XML序列化程序的角度来看:a)为属性值和文本节点生成不同的输出会使序列化过程更加复杂,而不会向结果添加任何值。 b)编写单个函数以便XML转义任何字符串然后重新使用它会更容易。 c)一般来说,对称性更容易处理,程序员也喜欢它。