当前位置: 首页 > 知识库问答 >
问题:

如何更改Hy中XML标记的名称?

公良云
2023-03-14

这是我在这里的第一篇帖子。。。

我正在尝试使用Hy中的赋值(在Python 3上运行)来更改XML元素。

当我尝试运行代码段时:

(setv tco (BeautifulSoup "<meek/>" 'xml))
(setv (. tco meek name) "defl")
(print (. tco meek name))
;(assoc (. tco defl) "new" "value")
(.append (. tco meek) "Kool Stuff")
(print (.prettify tco))

我得到一个错误:

Traceback(最近一次调用):File"/usr/bin/hy",第9行,load_entry_point('hy==0.11.0','console_scripts','hy')()File"/usr/lib/python3/dist-包/hy/cmdline.py",第347行,hy_mainsys.exit(cmdline_handler("hy",sys.argv))File"/usr/lib/python3/dist-包/hy/cmdline.py",第335行,cmdline_handler返回run_file(options.args[0])File"/usr/lib/python3/dist-包/hy/cmdline.py",第210行,run_fileimport_file_to_module("main",filename)File"/usr/lib/python3/dist-包/hy/importer.py",第78行,import_file_to_moduleava(ast_compile(_ast,fpath,"exec"),mod.dict)File"code-trace.hy",第196行,在(setv(. tco meek name)"defl")中的属性错误:'NoneType'对象没有属性'name'

正在运行第二行注释:

(setv tco (BeautifulSoup "<meek/>" 'xml))
;(setv (. tco meek name) "defl")
(print (. tco meek name))
;(assoc (. tco defl) "new" "value")
(.append (. tco meek) "Kool Stuff")
(print (.prettify tco))

没有错误(必须使用代码而不是块引号进行标记,以便正确显示):

meek
<?xml version="1.0" encoding="utf-8"?>
<meek>
 Kool Stuff
</meek>

请注意,这只是一个较大程序的一些测试代码。我在第4行评论的assoc也有问题。

共有1个答案

步德宇
2023-03-14

这是一个奇怪的!看起来更改名称会使(.tco meek)变为None,实际上它没有name属性。所以你必须抓住这个错误。然后,您必须参考(.tco defl),因为这是分配后如何知道的。这很有效。

#+BEGIN_SRC hy
(import [bs4 [BeautifulSoup]])

(setv tco (BeautifulSoup "<meek/>" 'xml))
(try (setv (. tco meek name) "defl") (except [e Exception] (print e)))
(print (. tco defl))
(assoc (. tco defl) "new" "value")
(.append (. tco defl) "Kool Stuff")
(print (.prettify tco))

#+END_SRC
#+RESULTS:
: 'NoneType' object has no attribute 'name'
: <defl/>
: <?xml version="1.0" encoding="utf-8"?>
: <defl new="value">
:  Kool Stuff
: </defl>

如果查看hy生成的Python:

#+begin_example
from hy import HySymbol
from bs4 import BeautifulSoup
tco = BeautifulSoup(u'<meek/>', HySymbol(u'xml'))
try:
    tco.meek.name = u'defl'
    _hy_anon_var_1 = tco.meek.name
except Exception as e:
    _hy_anon_var_1 = print(e)
print(tco.defl)
tco.defl[u'new'] = u'value'
tco.defl.append(u'Kool Stuff')
print(tco.prettify())
#+end_example

您可以在这一行中看到错误:_hy_anon_var_1=tco.meek.name.我想tco.meek.name在该行运行之前不存在,所以您会得到错误。我不知道为什么hy会以这种方式展开,这似乎与代码中(.)的使用有关,因为其他setv表达式不会以这种方式展开。

 类似资料:
  • 问题内容: 我是xml.i的新手,我使用了xml文件,如下所示: 从上面的xml我只想更改 我该如何更改walltreet?作为WonderWorld?通过我的Java应用程序。 我写了如下所示的java方法: 通过使用上面的代码,我能够将所有标签文本更改为奇迹世界,但是我的意图是我只想更改walltreet?作为WonderWorld。 任何人请帮助我..... 问题答案: 用 作为您的条件。

  • 我想更改Google Maps上选定的标记图标,因此我有以下代码: 在这一行,我从下面得到错误: 例外情况如下:

  • 问题内容: 如何更改Google地图中MyLocationOverlay的默认蓝色动画标记? 问题答案: 步骤#1:创建的子类。 步骤2:根据需要覆盖并绘制标记。请记住,此方法不仅会绘制标记,而且还会“如果用户的位置移动到屏幕边缘附近,并且在构造函数中提供了a ,我们将滚动滚动以重新显示新的读数”。

  • 问题内容: 我在我的应用程序中使用了Google地图,我有 自定义标记图标,但我将其加载, 但是我在地图上的图标尺寸 太大,我想使其变小,但我找不到任何选择,没有任何选择更改自定义标记图标。这是我的颤动代码: 如您在图片中看到的,我的自定义图标尺寸太大 问题答案: TL; DR:只要能够将任何图像编码为原始字节(例如) ,就可以将其用作标记。 截至目前,您可以使用数据在Google 地图中创建标记

  • 问题内容: 我正在使用python + BeautifulSoup解析HTML文档。 现在,我需要用替换HTML文档中的所有元素。 如何更改标签名称,而不更改文档中的其他任何内容? 问题答案: 我不知道您的访问方式,但以下内容对我有用: 命令输出为: 如您所见,变成了。文件中的其他内容都没有改变。我正在使用Python 2.6和BeautifulSoup 3.2.0。 如果您有多个,并且想要全部更

  • 有谁能帮助我阅读作为Web服务调用响应的XML吗。 我得到的回应是这样的: 当我得到-1作为响应时,我想预先执行动作。我如何阅读它。我在GAE中使用struts,我使用