我收到XML输出,并使用新的SimpleXMLElement对其进行转换。 输出是一个数组。所以XML元素是$ xml。
Sub Comment_on_Long_Sentences()
Dim doc As word.Document, rng As word.Range, para As word.Paragraph
Dim i As Long
Set doc = ActiveDocument
For Each para In doc.Paragraphs
Debug.Print para.Range.Sentences.Count
For i = 1 To para.Range.Sentences.Count
Set rng = para.Range.Sentences(i)
If i = 1 And rng.Characters.First.Font.Superscript = True Then
rng.MoveStart word.WdUnits.wdSentence, Count:=-1
End If
If rng.words.Count > 30 Then
doc.Comments.Add Range:=rng, Text:="Long Sentence: " & rng.words.Count & " words"
End If
Next
Next
End Sub
在第二个[categories_name]中,该值在字符串中有一个空格。由于空间有限,出了点问题。我没有得到任何返回的信息,如果我删除具有另一个没有空格的现有值的值,则会得到我想要的信息。
我该怎么办?
答案 0 :(得分:0)
将问题简化为一个可重现的小例子:
String compare:
string(7) "A Title"
输出:
normalize-space()
第二本书的标题包含前后的空格,因此简单的字符串比较将不匹配它。解决该问题的一种方法是使用echo "\nwith normalize-space():\n";
foreach ($books->xpath('//book[normalize-space(title)="A Title"]') as $book) {
var_dump((string)$book->title);
}
。此Xpath函数将用单个空格替换任何空白序列,并删除之前/之后的空白。它的作用很小,但在大多数情况下并不重要。
with normalize-space():
string(7) "A Title"
string(11) " A Title "
输出:
A Title
现在,它与两个标题都匹配,但也与trim()
之类的东西匹配。
另一种解决方案可让您进行更多控制,但需要DOM。在DOM中,您可以注册可从XPath表达式调用的PHP函数。这可以是现有功能,也可以是您自己的功能。您可以使$document = new DOMDocument();
$document->loadXML($xml);
$xpath = new DOMXpath($document);
$xpath->registerNamespace("php", "http://php.net/xpath");
$xpath->registerPhpFunctions(['trim']);
echo "\nCall back into PHP:\n";
$expression = '//book[php:functionString("trim", string(title)) = "A Title"]';
foreach($xpath->evaluate($expression) as $node) {
var_dump($xpath->evaluate('string(title)', $node));
}
可用:
{{1}}
使用您自己的回调函数,您可以执行RegEx匹配或unicode字符串音译之类的操作。